2012-03-25 31 views
1

我一直對如何從書上創建自定義路線的指令之後Zend Framework - A Beginners Guide無效使用控制器定製路由

我已經改變了我application.ini文件,包括該路由信息:

resources.router.routes.static-content.route = /content/:page 
resources.router.routes.static-content.defaults.module = default 
resources.router.routes.static-content.defaults.controller = static-content 
resources.router.routes.static-content.defaults.view = static-content 
resources.router.routes.static-content.defaults.action = display 

鑑於上述結構中,我有這樣的控制器:

<?php 

class Default_StaticContentController extends Zend_Controller_Action 
{ 

    public function init() 
    { 
     /* Initialize action controller here */ 
    } 

    public function displayAction() 
    { 
     // action body 
     $page = $this->getRequest()->getParam('page'); 
     if (file_exists($this->view->getScriptPath(null) . 
       '/' . $this->getRequest()->getControllerName() . '/' . 
       $page . $this->viewSuffix 
       )) { 
      $this->render($page); 
     } 
     else { 
      throw new Zend_Controller_Action_Exception('HLC - Page not found', 404); 
     } 
    } 
} 

我有一個在APPLICATION_PATH /模塊/默認/視圖名爲about.phtml視圖/靜態內容文件夾。

什麼ahppens是我得到一個錯誤說:

An error occurred 

Page not found 

Exception information: 

Message: Invalid controller class ("StaticContentController") 

Stack trace: 

#0 /Applications/MAMP/htdocs/zend/library/Zend/Controller/Dispatcher/Standard.php(262): Zend_Controller_Dispatcher_Standard->loadClass('StaticContentCo...') 
#1 /Applications/MAMP/htdocs/zend/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) 
#2 /Applications/MAMP/htdocs/zend/library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch() 
#3 /Applications/MAMP/htdocs/zend/library/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run() 
#4 /Applications/MAMP/htdocs/HLC/public/index.php(26): Zend_Application->run() 
#5 {main} 
Request Parameters: 

array (
    'page' => 'about', 
    'module' => 'default', 
    'controller' => 'static-content', 
    'view' => 'static-content', 
    'action' => 'display', 
) 

注意,它不是我的渲染定製Zend_Controller_Action_Exception但扔全局錯誤。

我使用的網址:http://hlc.local:8888/content/about

默認索引操作工作正常,只是該路由無法運作。

+0

我認爲你有問題,你的看法,應該是display.phtml – haltabush 2012-03-25 01:32:54

+0

那麼,它應該路由到about.phtml作爲控制器使用':page'參數找到正確的視圖文件。所以它應該是關於.phtml – Alex 2012-03-25 01:35:05

+0

OUPS,我的壞,對不起 – haltabush 2012-03-25 01:36:18

回答

2

如果你實際上是在密切關注這本書,你有你的路線聲明一個額外的行和你的控制器類應該是StaticContentController

這裏是從一個根本的工作簿路線定義。

resources.router.routes.static-content.route = /content/:page 
resources.router.routes.static-content.defaults.module = default 
resources.router.routes.static-content.defaults.controller = static-content 
resources.router.routes.static-content.defaults.action = display 

我還有這個代碼從去年夏天開始鋪設。

我發現這本書不到滿意的,並沒有真正適合初學者。它沒有解決選擇Zend_Db組件而是引入第1.2條原則。這似乎是一個趨勢,許多初學者/簡單書籍認爲完整的ORM比Zend_Db更有用。如果你已經熟悉教義,這種方法運作良好,否則要求初學者同時學習ZF和教義是很多的。

希望這會有所幫助。

+0

你說得對,我因爲某種原因添加了一個視圖。昨晚我做了這件事。稍後會檢查它...感謝提示。 – Alex 2012-03-25 12:28:17

+0

不幸的是,在更新application.ini文件後,它仍然失敗。完全相同的錯誤發生,除了這次請求params數組不包含'view'文件名。非常感謝。 – Alex 2012-03-25 13:52:53

+0

你有沒有把'Default_StaticContentController'的「Default」關掉? – RockyFord 2012-03-25 14:15:35

0

我現在不使用什麼自動加載。所以這將有助於確定。到目前爲止,我理解你的類命名應該是這樣的ModulePath_ApplicationPath_ControllerName,所以它的Default_Application_StaticContentController。

和更好的路由我更喜歡zend manual。你可以試試這個tutorial的路線。這對你有幫助。