我遇到了將自定義路由添加到我的應用程序的問題。 Zend Framework 1:Zend Framework 1爲路由添加單個自定義規則
我已經在使用默認的Zend路由工作。我有很多的控制器和他們中的一些我想要使用友好的URL,例如: domain.com/cities/edit/ ID/3 到 domain.com/cities/edit/ 阿布扎比
有一些控制器切換到該網址(以該格式)。
我試圖通過ini文件進行配置:
resources.router.routes.slugurl.route = /:controller/:action/:slug
並且還通過Bootstrap方法:
protected function _initSlugRouter()
{
$this->bootstrap('FrontController');
$router = $this->frontController->getRouter();
$route = new Zend_Controller_Router_Route('/:controller/:action/:slug/',
array(
'controller' => 'slug',
'action' => 'forward',
'slug' => ':slug'
)
);
$router->addRoute('slug',$route);
}
的主要問題 - 與INI配置 - 請求,直接轉到控制器城市(不決高下)。第二個(引導) - 還執行了城市控制器,但默認路由不工作,因爲它是,我不能夠執行: domain.com/cities/但domain.com/cities/index/作品。定義如果不採取行動的錯誤:
Action "forward" does not exist and was not trapped in __call()
我可以監視控制器中的「彈頭」 /移動檢查到一些圖書館,但我想只能用路由做 - 這樣看起來更適合我。請,如何解決這個問題?
編輯用的解決方案總結 感謝您最大P.有趣。我終於解決了它 - 在最後2分鐘:)我在路由的application.ini中有錯誤的規則。現在,它的定義是:
resources.router.routes.slugurl.route = /:controller/:action/:slug
resources.router.routes.slugurl.defaults.controller = :controller
resources.router.routes.slugurl.defaults.action = :action
resources.router.routes.slugurl.defaults.slug = :slug
控制器這樣的定義:
class CitiesController extends Crm_Abstract
的Crm_Abstract具有代碼:
<?php
class Crm_Abstract extends Zend_Controller_Action {
public function __construct(\Zend_Controller_Request_Abstract $request, \Zend_Controller_Response_Abstract $response, array $invokeArgs = array()) {
$params = $request->getParams();
if (!empty($params['slug'])) {
$modelSlug = Crm_Helper_Slug::getInstance();
$parameters = $modelSlug->redirectRequest($request);
if ($parameters !== false) {
foreach ($parameters as $key => $value) {
$request->setParam($key, $value);
}
}
}
parent::__construct($request, $response, $invokeArgs);
}
public function __call($methodName, $args) {
parent::__call($methodName, $args);
}
}
嵌塞助手在規定的控制器得到蛞蝓參數。訪問slug的URL被定義/計算,代替$ this-> url - 到$ this-> slug,其餘代碼在slug helper中完成。我不確定我的解決方案是否100%確定,因爲這是我第一次使用路由。
主要的事情是 - 我只是需要改變依靠Zend_Controller_Action到Crm_Abstract延伸的依靠Zend_Controller_Action。單行 - 每個控制器中不需要額外的自定義代碼。
如果評論這條路線是什麼錯誤出現URL domain.com/城市/編輯/阿布扎比? –
我會添加錯誤,只是當我將得到有效的錯誤代碼 - 我無法格式化它在評論:( – Mik
我仍然無法理解ZF路由 - 總是隻有一件事不太好 - 當我添加路由: 'resources.router.routes.slugurl.route = /:controller /:action /:slug' 'resources.router.routes.slugurl.defaults.controller =:controller' 'resources.router.routes.slugurl。 defaults.action =:action' 'resources.router.routes.slugurl.defaults.slug =:slug' 我無法訪問url:domain.com/developers/ - 錯誤代碼:Action「action」不存在並沒有陷入__call() - 它看起來像添加該路由規則 - 破壞默認路由,但我希望它保持。 – Mik