האפליקציה מהווה עיבוד ראשוני של הבקשות אשר נכנסות למערכת. המטרה העיקרית שלה היא לקבל את בקשת המשתמש ולהפנות אותה לקונטרולר המתאים להמשך עיבוד הנתונים. בנוסף היא משמשת לחלק המרכזי של כל ההגדרות באפליקציה. מסיבה זו,האפליקציה נקראת גם בשם 'קונטרולר-ראשי'.
האפליקציה נוצרת על ידי סקריפט הכניסה הראשי. ניתן לגשת לכל אובייקט וערך באפליקציה בעזרת Yii::app().
כברירת מחדל, אפליקציה היא אובייקט של CWebApplication. להתאמה אישית, אנחנו בדרך כלל מספקים קובץ הגדרות (או מערך) כדי לאתחל את המאפיינים של קובץ/מערך ההגדרות בעת יצירת האפליקציה. דרך נוספת להתאמה אישית של האפליקציה היא על ידי הרחבת CWebApplication.
ההגדרות הם מערך של אלמנטים בפורמט של מפתח=>ערך. כל מפתח מייצג את שמו של המאפיין באובייקט של האפליקציה, וכל ערך את ערך ברירת המחדל של אותו מאפיין. לדוגמא, ההגדרות הבאות מגדירות את שם האפליקציה ו קונטרולר ברירת המחדל של האפליקציה.
array(
'name'=>'Yii Framework',
'defaultController'=>'site',
)
בדרך כלל אנחנו שומרים את קובץ ההגדרות של האפליקציה בקובץ PHP נפרד (לדוגמא protected/config/main.php
). בתוך הקובץ אנחנו מחזירים את מערך ההגדרות בצורה הבאה,
return array(...);
כדי ליישם את ההגדרות, אנחנו מעבירים את שם קובץ ההגדרות כפרמטר לקונסטרקטור (constructor) של האפליקציה, או ל Yii::createWebApplication() כמו הדוגמא הבאה, שבדרך כלל נעשית ב סקריפט הכניסה הראשי.
$app=Yii::createWebApplication($configFile);
טיפ: אם ההגדרות של האפליקציה הם מורכבות, ניתן לפצל אותם לכמה קבצים, כל אחד מחזיר חלק אחר ממערך ההגדרות הכולל. לאחר מכן, בקובץ ההגדרות הראשי של האפליקציה ניתן להשתמש בפונקצית ה
include
של PHP כדי להוסיף את שאר קבצי ההגדרות ולאחד אותם למערך הגדרות אחד כולל.
ספרית הבסיס של האפליקציה מתיחחסת לתיקיה הראשית אשר מכילה את כל קבצי ה PHP והמידע של המערכת, הרגישים מבחינת אבטחה. כברירת מחדל, זוהי תת תיקיה בשם protected
אשר נמצאת תחת התיקיה אשר מכילה את סקריפט הכניסה הראשי. ניתן לשנותה על ידי הגדרת המאפיין basePath בהגדרות האפליקציה.
התוכן תחת התיקיה הראשית של האפליקציה צריך להיות מוגן מגישה וצפייה ישירה ועקיפה על ידי משתמשים. בעזרת Apache HTTP, ניתן לבצע זאת בצורה פשוטה על ידי הוספת קובץ htaccess.
תחת התיקיה הראשית. הקובץ htaccess.
אמור להכיל את הקוד הבא,
deny from all
הפונקציונליות של האפליקציה ניתנת להתאמה אישית בצורה קלה בעזרת הארכיטקטורה הגמישה של רכיב זה. האפליקציה מנהלת סט של רכיבי-אפליקציה, כל אחד מיישם אפשרויות מסויימות. לדוגמא, האפליקציה נעזרת ברכיבים CUrlManager ו CHttpRequest כדי לקבל את בקשת המשתמש ולנתב אותה למקום המתאים.
על ידי הגדרת ערך הרכיבים באפליקציה, ניתן להגדיר בצורה אישית את הערכים והמחלקה של כל רכיב אשר משתמשים בו באפליקציה. לדוגמא, ניתן להגדיר את הרכיב CMemCache בצורה כזו שיעבוד מול כמה שרתי memcache כדי לשמור תוכן במטמון,
array(
......
'components'=>array(
......
'cache'=>array(
'class'=>'CMemCache',
'servers'=>array(
array('host'=>'server1', 'port'=>11211, 'weight'=>60),
array('host'=>'server2', 'port'=>11211, 'weight'=>40),
),
),
),
)
בקוד המוצג למעלה, אנחנו מוסיפים את האלמנט cache
למערך של ה components
. האלמנט cache
הצהיר שהמחלקה של הרכיב הזה הינה CMemCache
והערך של servers
(שרתים) צריך להיות מוגדר כפי שהוא מוצג בקוד למעלה.
כדי לגשת לרכיב באפליקציה, יש להשתמש ב Yii::app()->ComponentID
, כש ComponentID
מתייחס לשם היחודי של הרכיב (לדוגמא Yii::app()->cache
).
ניתן לכבות כל רכיב באפליקציה על ידי הגדרת הערך enabled
ל false בהגדרות של אותו רכיב. ברגע שננסה לגשת לרכיב שהוא לא פעיל נקבל את הערך השווה ל Null.
טיפ: כברירת מחדל, רכיבים באפליקציה נוצרים בעת בקשתם. זה אומר שרכיב באפליקציה יכול לא להווצר כלל אם לא קראו לו במהלך הבקשה של המשתמש. כתוצאה מכך, הביצועים הכללים של האפליקציה לא מושפעים גם אם האפליקציה מוגדרת עם הרבה רכיבים. חלק מהרכיבים באפליקציה (לדוגמא CLogRouter) צריכים להווצר בכל מקרה בין אם קראו לאותו רכיב או לא. כדי לבצע זאת, רשום את המזהה היחודי שלהם במאפיין preload (טעינה מראש) של האפליקציה.
Yii מגדירה מראש סט של רכיבים מרכזיים באפליקציה כדי לספק אפשרויות משותפות בקרב אפליקציות ווב. לדוגמא, הרכיב request מעבד את בקשת המשתמש ומאפשר שימוש במידע כגון קישורים, עוגיות. על ידי הגדרת המאפיינים של רכיבים בסיסיים אלו, ניתן לשנות את אופי ההתנהלות של Yii בכל היבט כמעט.
למטה מופיעים הרכיבים הבסיסיים שמוגדרים מראש על ידי CWebApplication.
assetManager: CAssetManager - מנהל פרסום של קבצי הנכסים הפרטיים (בדרך כלל קבצי JS, CSS ותמונות).
authManager: CAuthManager - ניהול בקרת גישות
cache: CCache - מספק פונקציונליות לניהול מטמון. הערה, הינך חייב לציין את שם המחלקה (לדוגמא CMemCache, CDbCache). אחרת, יוחזר ערך השווה ל Null ברגע שתנסה לגשת לרכיב זה.
clientScript: CClientScript - ניהול סקריפטים בצד הלקוח (קבצי CSS ו JS).
coreMessages: CPhpMessageSource - מספק תרגום של משפטי המקור אשר מוגדרים במערכת הפנימית של Yii.
db: CDbConnection - מספק את החיבור של מסד הנתונים. הערה, הינך חייב להגדיר את המאפיין connectionString כדי להשתמש ברכיב זה.
errorHandler: CErrorHandler - טיפול בשגיאות PHP ושגיאות חריגות אחרות שלא נתפסו.
format: CFormatter - מעבד מידע למטרת תצוגה בלבד. אפשרות זאת קיימת מגרסא 1.1.0.
messages: CPhpMessageSource - מספק ניהול תרגומים של האפליקציה עצמה.
request: CHttpRequest - מספק מידע הקשור לבקשת המשתמש.
securityManager: CSecurityManager - מספק שירותים הקשורים לאבטחת מידע, כגון יצירת HASH והצפנה.
session: CHttpSession - מאפשר שימוש ב SESSIONS.
statePersister: CStatePersister - מאפשר ניהול של מידע אשר שמור באופן קבוע.
urlManager: CUrlManager - מאפשר עיבוד של קישורים ויצירתם.
themeManager: CThemeManager - ניהול תבניות.
בעת טיפול בבקשת המשתמש, אפליקציה תעבור במחזור החיים הבא:
אתחול האפליקציה בעזרת CApplication::preinit;
הגדרת מחלקת הטעינה האוטומטית ומחלקת טיפול בשגיאות;
רישום רכיבים בסיסים של האפליקציה;
טעינת הגדרות האפליקציה;
אתחול האפליקציה בעזרת CApplication::init
- רישום התנהלות האפליקציה; - טעינת רכיבים סטטיים של האפליקציה;
העלאת אירוע onBeginRequest;
תהליך עיבוד בקשת המשתמש:
- עיבוד הבקשה; - יצירת קונטרולר; - הרצת קונטרולר;
Found a typo or you think this page needs improvement?
Edit it on github !
Signup or Login in order to comment.