2. מי אני?
ניר טייב, בן 5.71 ממודיעין.
מתכנת לאינטרנט מזה 4-3 שנים בטכנולוגיות שונות. כיום
עובד ב- Kontera.comבתור מתכנת Rubyו-.Rails
בלוגר – כותב על בניית UIב- ,JavaScriptצד שרת וחדשות
בתחום. http://webdev.blogli.co.il
מתכנת ב- PHPכשנתיים ומשתמש ב- ZFכ-3 חודשים.
3. ,Zend Frameworkמה זה?
ספריית רכיבים - מכילה רכיבים שונים למטרות שונות,
בסיסיות ומבוקשות, שלא תלויים אחד בשני.
כתוב %001 ב-4.1.5 PHPבלי להתבסס על שום
.Extensions
קוד פתוח – כל אחד יכול לתרום לפריימוורק. משוחרר
ברישיון .BSD Like
4. Zend_Controllerמה זה?
חלק מרכיב ה- MVCשל ה- ,Frameworkמשמש ליצירת ה-
Controllerבאפליקצייה. ה- Cב-.MVC
משמש לניתור בקשת ה- HTTPומחליט מה עושים איתה
לפי הנתונים שנשלחו יחד איתה.
5. ., בסיסZend_Controller
.Zend_Controller_Action יורש את
Controller-שם המחלקה יסתיים ב
IndexController, BlogController
:קו תחתון בשם המחלקה מסמן חלוקה לתיקיות
Foo_AdminController =< Foo/AdminController.php
, שם הקובץ יכיל מקף אוCamelCase-מותר להשתמש ב
.נקודה בסוף כל מילה
6. Controller Actions:
HTTP.- לניתור בקשת הController- – מתודה בAction
http://domain.com/entries/list =< Action: list
.“ היא חשופה לבחוץAction“-כל מתודה שמסתיימת ב
public function listAction
7. Front Controller
מטפל בכל הבקשות.
מדביק את האפליקציה ביחד.
מחזיר תשובה ללקוח.
9. קצת קוד
class EntriesController extens Zend_Controller_Action{
public function indexAction(){
echo 'Index !';
}
public function listAction(){
echo '1, 2, 3';
}
}
10. טיפול ב- QueryStringוב-Post Data
המתודה _getParamלקריאה למשתנה אחד.
המתודה _getAllParamsלקריאה של כולם.
המתודות מקבלות את כל המשתנים מה- - QueryStringשורת
הכתובת, ומה- - Post Dataהמשתנים שנשלחים בגוף בקשת ה-
,HTTPלרוב בעזרת טופס עם .method=post
11. ובדרך אחרת
להשתמש בפרמטרים של ה- Actionsלגישה ל-QueryString
וה-.Post Data
יתרונות:
* רשימה ברורה של כל הפרמטרים
* .type hinting
* ערכי ברירת מחדל.
חסרונות: ביצועים.
12. :דוגמאות
Framework Way:
public function listAction(){
$entry = $model-<find(intval($this-<_getParam(”id”)));
$mode = @$this-<_getParam(”mode”);
echo showContent($mode || 'plain', $entry-<data);
}
New Way:
public function listAction($id, $mode='plain'){
$entry = $model-<find(intval($id));
echo showContent($mode, $content-<data);
}
13. איך עושים זאת?
בשישה שלבים:
1. יורשים את .Zend_Controller_Action
2. דורסים את המתודה .dispatch
3. שומרים את כל ה- Request Parametersבמערך.
4. שומרים את כל ה- Method Parametersבמערך.
5. מפעילים את ה- Actionדינמית תוך כדי מיפוי המערך משלב 3 בסדר
של שלב .4
6. כל Controllerבאפליקציה יירש מהמחלקה שיצרנו בשלב 1.
14. :מימוש התהליך
// 1. Make a new controller class the inherit Zend_Controller_Action
class Action_With_Parameters_Controller extends Zend_Controller_Action {
// 2. Override the `dispatch` method
public function dispatch($action) {
// 3. Get all request parameters
$params = $this-<_getAllParams();
// 4. Get all action method parameters
$method_params_array = $this-<get_action_params($action);
$data = array(); // It will sent to the action
foreach($method_params_array as $param) {
$name = $param-<getName();
if($param-<isOptional()) { // Check whether the parameter is optional
// If there is no data to send, use the default
$data[$name] = !empty($params[$name])? $params[$name] : $param-<getDefaultValue();
} elseif(empty($params[$name])) {
// The parameter cannot be empty as defined
throw new Exception('Parameter: '.$name.' Cannot be empty');
} else {
$data[$name] = $params[$name];
}
}
// 5. Invoke the action and pass the request parameters as actions method parameters, according to their order and names.
call_user_func_array(array($this, $action), $data);
}
private function get_action_params($action) {
$classRef = new ReflectionObject($this);
$className = $classRef-<getName();
$funcRef = new ReflectionMethod($className, $action);
$paramsRef = $funcRef-<getParameters();
return $paramsRef;
}
}
15. !תודה
:לעוד חומר בנושא
http://framework.zend.com/manual/en/zend.controller.html ●
:השיטה המוצגת כאן, כתובה במאמר מפורט ●
http://devzone.zend.com/article/2855
.חשוב מאוד! לקרוא את התגובות
:Zend Framework שלMVC-מצגת מקיפה על רכיב ה ●
http://devzone.zend.com/content/zendcon_07_slides/Ophinney_Matthew_2007-ZendCon-M