ããã§ã¯ãããããäœãããããäžæ©ãã€èŠãŠãããŸãããã
- -éèŠãªã¡ãœãããè¿œå ããŠãŠãŒã¶ãŒãšé£æºããããšã«ãããããŒã¹ã³ã³ãããŒã©ãŒãæ¡åŒµããŸãïŒå°ãªããšã管çãã°ã€ã³ã¬ãã«ã§ããããžã§ã¯ãã®99ïŒ ã«ååšããŸãïŒã
- -ãã¥ãŒãã¡ã€ã«ã䜿çšããŠãã䟿å©ã§çŸããäœæ¥ãè¡ãããã®ããã³ãã³ã³ãããŒã©ãŒãäœæããŸãã
- -ããã³ãã³ã³ãããŒã©ãŒãä»ããŠæ€èšŒãšã©ãŒã®åºåãå®è£ ããŸã
- -ãã¥ãŒã®åºæ¬ã¯ã©ã¹ãæ¹åãã
- -ããŠãä»ã®ããã€ãã®æçšãªããããªããš
ããã§ã¯å§ããŸããã...
ãã§ã«ããã€ãã®ç°¡åãªæé ãå®è¡ããŠããããšãåæãšããŠããŸããã€ã¡ãŒãžå ã«.htaccessãã¡ã€ã«ãäœæããexample.htaccessã®èåãäœæããŠãäœæ¥ãã£ã¬ã¯ããªãžã®å¿ èŠãªãã¹ãèšå®ããŸãã Kohana :: initã¡ãœããã®åæåãã©ã¡ãŒã¿ãå€æŽããŸããïŒãŸããäœæ¥ãã£ã¬ã¯ããªãžã®ãã¹ãèšå®ããïŒå¥œã¿ã«åãããŠïŒ 'index_file' => FALSEãèšå®ããŸã;ãã®åŸã®äœæ¥ã«å¿ èŠãªã¢ãžã¥ãŒã«ãæ¥ç¶ããŸãã...
ããã§ãããã©ã«ãã«ãŒããã€ã³ã¹ããŒã«ãããŠããbootstrap.phpã®çµãããèŠãŠã¿ãŸããããéåžžãã¢ããªã±ãŒã·ã§ã³ã«ã¯ã«ãŒããããã€ãããŸããïŒ åïŒ äºåïŒ ç§ã®Ko3.0ã§ã®æåŸã®ã¢ããªã±ãŒã·ã§ã³ã«ã¯çŽ30ããããŸããããDofigaã¯äžè¬ã«ãããã«ä¿åããããã«ãå®éã«ã¯bootstrap.phpã«ä¿åãããŠããããŒã¿ãšæ··åãããŠããŸãã ãŠã§ã€ã¢ãŠãïŒ ãããããã¹ãŠå¥ã®ãã¡ã€ã«ã«åãåºããŠå«ããŸãã ãããèšã£ãŠã¿ãŸãããïŒ
routes.phpãšããååã®ã¢ããªã±ãŒã·ã§ã³ãã©ã«ããŒã«æ°ãããã¡ã€ã«ãäœæããããã«Route :: setïŒ 'default'ïŒå šäœã転éããŸã...ãããŠbootstrap.phpã®ä»¥åã®å Žæã§require_once APPPATH.'routes.php 'ãšæžãã ãã§ã;
ããã§ãã³ã³ãããŒã©ã¯ã©ã¹ïŒKohana_Controllerã®ã¯ã©ã¹ïŒã«ã¯ãã³ã³ãããŒã©ã®ãããã£ãã®ååŸã«ããããå®è¡ãããçŽ æŽãããã¡ãœããïŒïŒããã³afterïŒïŒãããããšãæãåºããŠãã ããã ããã§ãã»ãšãã©ã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãå°ãªããšã管çãã°ã€ã³çšã«èªèšŒã¢ãžã¥ãŒã«ïŒauthïŒãæ¥ç¶ããããšã«æ³šæããŠãã ããã ãªããããããŠããã®ã§ããïŒ
ãããŠãããŒã¹ã®Kohana_Controllerãåå®çŸ©ããããã§ïŒå¯èœæ§ã®ããïŒãŠãŒã¶ãŒãšã®äœæ¥ãå§ããŸãããã
<?php class Controller extends Kohana_Controller { /** * @var auth property with instance of "Auth" module */ public $auth = NULL; /** * @var user property with object of user */ public $user = FALSE; public function before() { parent::before(); $this->auth = Auth::instance(); $this->user = $this->auth->get_user(); } public function after() { parent::after(); } }
ãããŠãcontroller.phpãšããååã§application / classesãã©ã«ããŒã«ãã®å 容ãä¿åããŸã
ããã§ã¯ãå°æ¥ã©ã®ã³ã³ãããŒã©ãŒã®ã©ã®å Žæã§ã絶察ã«å¿ èŠãªãã®ãèããŠã¿ãŸãããã ãªãã€ã¬ã¯ãïŒ ã§ã2ã€ïŒ å®éã«ã¯-ã¡ã€ã³ã®ãªãã€ã¬ã¯ããšãªãã€ã¬ã¯ããžã®ãªãã€ã¬ã¯ãã å¿ èŠãªç¶æ³ã«ã€ããŠã¯èª¬æããŸãããããªãã€ã¬ã¯ãã®å¿ èŠæ§ã«åæããå Žåã«ã®ã¿ããããã«ã€ããŠããã«èªã¿ãŸãã
ããŒã ãžã®ãªãã€ã¬ã¯ããšã¯ããã©ã¡ãŒã¿ãªãã§ããã©ã«ãã«ãŒãã«å¯Ÿå¿ããã¢ãã¬ã¹ã«ãŠãŒã¶ãŒããªãã€ã¬ã¯ãããããšãæå³ããŸãã ãªãã€ã¬ã¯ããæ»ããšã¯ããªãã¡ã©ãŒã©ã€ã³ããã¢ãã¬ã¹ã«ãªãã€ã¬ã¯ãããããšãæå³ããŸãã ããã§ãªãå Žåã¯ãäžèšã®ãªãã€ã¬ã¯ãã䜿çšããŠã¡ã€ã³ãžã®ãªãã€ã¬ã¯ããè¡ããŸãã ãŸãã2çš®é¡ã®ãªãã€ã¬ã¯ãã䜿çšã§ããŸãïŒãããŸã§ã®ãšãããç§ã«ãšã£ãŠã¯åœ¹ã«ç«ããªãã£ãããæ©äŒã¯æçšã§ãããšæãããïŒ-çŸåšã®ãªã¯ãšã¹ãã®ãªãã€ã¬ã¯ãïŒHMVCãªã©ïŒãšã¡ã€ã³ãªã¯ãšã¹ãã®ãªãã€ã¬ã¯ãã ããã©ã«ãã§ã¯ãã¡ã€ã³ãªã¯ãšã¹ãããªãã€ã¬ã¯ãããŸãã å®éã«ã¯ãäžèšã®ä»¥äžã®å®è£ ãææ¡ããŸãïŒbeforeïŒïŒã¡ãœããã®åŸã«åãã¢ããªã±ãŒã·ã§ã³/ã¯ã©ã¹/controller.phpã§ãã¹ãŠãèšè¿°ããŸãïŒïŒ
public function go_home($current_request_only = FALSE) { $url = Route::url('default', NULL, TRUE); $this->go($url, $current_request_only); } public function go_back($current_request_only = FALSE) { Validate::url(Request::$referrer) OR $this->go_home($current_request_only); $this->go(Request::$referrer, $current_request_only); } private function go($url, $current_request_only) { $request = ($current_request_only) ? $this->request : Request::instance(); $request->redirect($url); }
å°ãã®æ¹æ³ã説æããŸãïŒ
go_homeïŒïŒã¡ãœããã§ãããã©ã«ãã®ã«ãŒãURLãååŸããgoïŒïŒã¡ãœãããåŒã³åºããŸã
go_backïŒïŒã¡ãœããã§ãRequest :: $ referrerããURLã®æå¹æ§ã確èªãããã¹ãã«åæ Œããªãå Žåãå®è¡ãäžæãããgo_homeïŒïŒã¡ãœãããå®è¡ããŸã
goïŒïŒã¡ãœããã§ããªãã€ã¬ã¯ããããªã¯ãšã¹ãã決å®ããŸãïŒããã©ã«ãã§ã¯ãRequest :: instanceïŒïŒãã¡ã€ã³ãªã¯ãšã¹ãã§ããã$ this->ãªã¯ãšã¹ããå¯èœã§ãïŒ
ããŸããŸãªã¯ãšãªïŒHMVC /ã·ã³ãã«ïŒã«ã€ããŠèª¬æããŠããã®ã§ãRequestã¯ã©ã¹ã®ããããªçç¥ãæé€ããŸãããã çç¥ãããŠããã®ã¯ãKohana 3.0ãšã¯ç°ãªããKohana 3.1ãšã¯ç°ãªãããªã¯ãšã¹ãã®æææš©ãå€å¥ããæ¹æ³ããªããRequest :: $ is_ajaxã®ã¿ã§ãã
ãã¡ã€ã«application / classes / request.phpãäœæããŠæžã蟌ã¿ãŸãïŒ
class Request extends Kohana_Request { public function is_initial() { return $this === Request::instance(); } }
Request :: currentïŒïŒã¯ã¡ã€ã³ãªã¯ãšã¹ãïŒã·ã³ã°ã«ããŒã³ïŒã®ã€ã³ã¹ã¿ã³ã¹ãè¿ããããçŸåšã®Requestãªããžã§ã¯ãã$ thisã§ãããã©ããã確èªããã ãã§ååã§ãã ãã®æ¹æ³ã¯ãå°æ¥çã«åœ¹ç«ã¡ãŸãã
次ã«ãåçŽãªã³ã³ãããŒã©ãŒã®æ¡åŒµæ©èœããããŸããããã¯ãäžéšã®ã¢ã¯ã·ã§ã³ãå®è¡ããã ãã§ãªããViewã§ãæ©èœããã³ã³ãããŒã©ãŒã§ãã ãããController_FrontãšåŒã³ãŸãããïŒKohanaã¯Controller_Templateãšããååã§äŒŒããããªãã®ããªã¢ãŒãã§æäŸããŠããŸã-奜ã¿ã®åé¡ã§ãããååã«äŸåãããã®ã¯ãããŸãã-æ®ãã®ã³ã³ãããŒã©ãŒãç¶æ¿ããã¯ã©ã¹ã ãã§ãïŒã
Controller_Frontã¯ããã¥ãŒå šäœããã©ãããŒããšãã³ã³ãã³ããã«å解ããŸãã ã©ãããŒã¯ããããžã§ã¯ãã®ãã¹ãŠã®ããŒãžã®æšæºçãªããŒã¯ã¢ããç¹æ§ã§ããDoctypeãã¹ã¿ã€ã«ã®æ¥ç¶ããã¹ãŠã®ããŒãžã«ããã¹ããã¹ãŠãã¹ãŠããããŸãã ã³ã³ãã³ãã¯ç¹å®ã®ã³ã³ãããŒã©ãŒã®çµæã§ãã Controller_Frontããå°ã泚æãããããŠãããã«äœæããŠãå®éã«äœã話ããŠããã®ããç解ããŸãããã
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta name="author" content="Roman Chvanikoff" /> <title><?php echo $title; ?></title> </head> <body> <?php echo $content; ?> </body> </html>
ããã«ãã³ã³ãããŒã©ãŒã®äœæ¥ã®çµæãšããŠååŸãããã³ã³ãã³ãïŒ$ã³ã³ãã³ãïŒãåã蟌ãŸããããã®ãããªã©ãããŒããããŸãã
ãããã¢ããªã±ãŒã·ã§ã³/ãã¥ãŒ/index.phpãšããŠä¿åããŸã
ã§ã¯ãKohanaã®ããã©ã«ãã«ãŒãã§ããwelcome / indexã®ã³ã³ãã³ããã¥ãŒãäœæããŸãããã
<h1>Welcome!</h1>
ãããã¢ããªã±ãŒã·ã§ã³/ãã¥ãŒ/ãããã/index.phpãšããŠä¿åããŸã
å®éããã®èšäºã®è¡ã§ã¯ãäœããã®çç±ã§ä»¥åã¯ããŸããããªãã£ããã©ãããã©ãããŒãšã¯äœããã³ã³ãã³ããšã¯äœãããã§ã«ç解ããŠããã¯ãã§ãã
ããããController_Frontã«æ»ããŸãã ã©ãããŒã®ååãã³ã³ãããŒã©ãŒã§åå®çŸ©ãããŠããªãå Žåã¯ãããã©ã«ãã§ãã¹ãŠãã€ã³ããã¯ã¹ã©ãããŒã«ã¬ã³ããªã³ã°ããŸãããïŒã¢ããªã±ãŒã·ã§ã³ã®ããžãã¯ãããããªãïŒã
class Controller_Front extends Controller { /** * @var layout wrapper of content for final output */ public $layout = 'index'; /** * @var content controller-generated output */ public $content; /** * @var errors all logic errors (including Validate errors) should be stored here */ public $errors; /** * @var post Validate object of _POST */ public $post; /** * @var view_path define what folder should be used to generate Views * values: * NULL - View::path will be generated as name of called controller * FALSE - View::path will not affect views generation * string - View::path will have value of the view_path property */ public $view_path = NULL; public function before() { parent::before(); $this->layout = View::factory($this->layout); $this->layout->set_global('user', $this->user); $this->post = Validate::factory($_POST); // Doubts? Look at view_path property definition if (is_null($this->view_path)) { View::$view_path = $this->request->controller; } elseif ($this->view_path) { View::$view_path = $this->view_path; } } public function after() { /** * Clear View "environment" */ View::$view_path = NULL; if ( ! Validate::not_empty($this->errors)) { $this->errors = NULL; } else { // $this->errors should be an array to pass it as argument to View. is_array($this->errors) OR $this->errors = array($this->errors); // $this->errors is a View now $this->errors = View::factory('errors', array('errors' => $this->errors)); } // $this->content can be a simple string or something like that so we check if it is a View file if ($this->content instanceof View) { // Append post-data $this->content->post = $this->post; // Append errors $this->content->errors = $this->errors; } // If request is initial - return layout with attached content if ($this->request->is_initial() AND ! Request::$is_ajax) { // Append content to layout $this->layout->content = $this->content; // Set response $this->request->response = $this->layout; } else { // Set response as controller-generated output $this->request->response = $this->content; } parent::after(); } }
ãã®ã³ã³ãããŒã©ãŒã§ã¯ãView :: $ view_pathã§äœæ¥ããããšãé€ããŠãã³ã¡ã³ããããã¹ãŠãæ確ã«ãªã£ãŠããããšãæã¿ãŸã-ããã¯äœã§ããïŒ ããã«ããã$ this-> content = View :: factoryïŒ 'user / edit'ïŒ;ã®ãããªç°ãªãã¢ã¯ã·ã§ã³ã§åãã³ã³ãããŒã©ãŒå ã«è¡ãèšè¿°ã§ããªããªããŸãã ãããŠãããã³ã³ãã¯ããª$ this-> content = View :: factoryïŒ 'edit'ïŒ;
ãšããã§ãViewèªäœãå±éããŸããããããã§ãªãå Žåããããã©ã®ããã«å®è£ ããŸããïŒ
class View extends Kohana_View { /** * @staticvar view_path a directory that will be used to generate views */ public static $view_path = NULL; /** * Sets the view filename. * * $view->set_filename($file); * * @param string view filename * @return View * @throws Kohana_View_Exception */ public function set_filename($file) { $directory = 'views'; if ( ! is_null(View::$view_path)) { $directory .= DIRECTORY_SEPARATOR.View::$view_path; } if (($path = Kohana::find_file($directory, $file)) === FALSE) { throw new Kohana_View_Exception('The requested view :file could not be found in :directory', array( ':file' => $file, ':directory' => $directory, )); } // Store the file path locally $this->_file = $path; return $this; } }
Controller_Frontããã®ãã®å€æŽãããã¯ã©ã¹ã§ã®äœæ¥ãã¹ã±ãžã¥ãŒã«ãããåŸãããã§åæ¢ããå¿ èŠã¯ãªããšæãã®ã§ããã®ãã¡ã€ã«ãapplication / classes / view.phpãšããŠä¿åããController_Frontãapplication / classes / controller / front.phpããã³ "ããã«é²ãã§ããŸããã
ãŠã§ã«ã«ã ã³ã³ãããŒã©ãŒïŒã¢ããªã±ãŒã·ã§ã³/ã¯ã©ã¹/ã³ã³ãããŒã©ãŒ/ welcome.phpïŒãéããextended ControllerãController_Frontã«æ¡åŒµããããã«å€æŽããã€ã³ããã¯ã¹ã¡ãœããã§ãæåå$ this-> request-> response = 'helloãworldïŒ'; $ this-> content = View :: factoryïŒ 'index'ïŒ;
ããŠããã¹ãŠãæ£ããå®äºãããããã©ãŠã¶ãéããŠãããžã§ã¯ãã®ã¢ãã¬ã¹ã«ç§»åããViews / welcome / index.phpã®ãã¥ãŒãã¡ã€ã«ã衚瀺ããŸãã
ããšãã
ãã®èšäºã¯ãè¿œå ããŠå ¬éããã©ã«ããŒã«ã»ãŒ1ãæé眮ãããŠããŸãããããããããã®äžã®æ å ±ãäœããã®æ¹æ³ã§äžŠã¹æ¿ããå®éã«å ¬éããããšãã§ããŸããã ããªãããããèªãã§ããã°ããã®éããªãã«ç解ã§ããªããŸãŸã§ãã£ãããç§ãã³ãŒãã«ééããç¯ããããããªããèšäºã«åŸã£ãŠãã¹ãŠãããããäœãããŸããããªãã£ãå Žå-ã³ã¡ã³ããããã«æžããŠãç§ã¯ã§ããã ãæ©ãçããŸãã ;ïŒ
PSïŒãã€ããadd and publishããã©ã«ãããæ®ãã®èšäºãæã«å ¥ãããšæãã®ã§ããã®èšäºã¯ã»ãã®å§ãŸãã«éããŸããããããããç§ãã¡ãããããšã«åºã¥ããŠç°¡åãªã¢ããªã±ãŒã·ã§ã³ãäœæããŸãïŒã³ã¡ã³ãã«ææ¡ãæžãïŒãã®èšäº-ããã«ãããäœæããã°ããã®ã¢ã¡ããã£ãè©äŸ¡ã§ããŸãã
UPDïŒ
ãã¥ãŒãã¡ã€ã«views / errors.phpã¯æ¬¡ã®ããã«ãªããŸãã
<ul class="errors"> <?php foreach ($errors as $error) : ?> <li><?php echo $error; ?></li> <?php endforeach; ?> </ul>