我已经设置了自定义路线,我的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的索引动作如下所示,出于测试目的,我将参数传递给视图(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');
}
当我没有使用自定义参数时,它可以工作,它可以找到用户并显示他的用户名。但是,当我使用网址athlete/kerowan
时,我收到错误Action 'kerowan' was not found on handler 'athlete'
,根据我的理解,这意味着路由器某种方式设置不正确或没有#&# 39; t抓住网址。有什么想法吗?
答案 0 :(得分:2)
前段时间我遇到了同样的问题,我在文档或论坛中找不到如何使用可选参数创建路径。我想出的最佳解决方案是,如果我希望方法具有不同的行为(如在您的示例中),则有两条路由。这将为您解决问题:
$router->add('/athlete/{username}', 'Athlete::index');
$router->add('/athlete', 'Athlete::index');
如果某人有更好/更优雅的解决方案,请分享:)
答案 1 :(得分:1)
默认情况下,phalcon的路由器在此约定中使用自动路由:多模块应用程序中的'/:module/:controller/:action/:params
和单模块应用程序中的'/:controller/:action/:params
。如果你想摆脱它,那么你必须将false传递给路由器构造函数。