[英]Phalcon router doesn't seem to be set
我已經設置了自定義路由,我的routes.php目前看起來像這樣:
<?php
$router = new Phalcon\Mvc\Router();
$router->add('athlete/{username}', array(
'controller' => 'athlete',
'action' => 'index',
));
return $router;
在我的services.php中,我正在設置路由器:
$di->set('router', function() {
return require __DIR__ . '/routes.php';
});
我的AthleteController的索引動作看起來像這樣,出於測試目的,我將param傳遞給視圖( username
):
public function indexAction()
{
$username = $this->dispatcher->getParam('username');
if (!isset($username)) {
$user = Users::findFirstByUsername($this->auth->getIdentity()['username']);
} else {
$user = Users::findFirstByUsername($username);
if (!$user) {
$this->flash->error('Could not find this user');
}
}
$this->view->user = $user;
$this->view->username = $username;
$this->view->setTemplateBefore('public');
}
當我沒有使用自定義參數時,它可以工作,它可以找到用戶並顯示他的用戶名。 然而,當我使用例如url athlete/kerowan
,我得到錯誤Action 'kerowan' was not found on handler 'athlete'
,根據我的理解,這意味着,路由器某種程度上設置不正確或者沒有抓住網址。 有任何想法嗎?
前段時間我遇到了同樣的問題,我在文檔或論壇中找不到如何使用可選參數創建路徑。 我想出的最佳解決方案是,如果我希望方法具有不同的行為(如在您的示例中),則有兩條路由。 這將為您解決問題:
$router->add('/athlete/{username}', 'Athlete::index');
$router->add('/athlete', 'Athlete::index');
如果有人有更好/更優雅的解決方案請分享:)
默認情況下,phalcon的路由器在此約定中使用自動路由: '/:module/:controller/:action/:params
多模塊應用程序中的'/:controller/:action/:params
和單模塊應用程序中的'/:controller/:action/:params
。 如果你想擺脫它,那么你必須將false傳遞給路由器構造函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.