【问题标题】:Routing in Phalcon - parameter before the end of the routePhalcon中的路由 - 路由结束前的参数
【发布时间】:2016-11-02 07:20:36
【问题描述】:

我正在尝试按照以下 URL 结构在 Phalcon 中设置路由:

www.example.com/language/register/

这是我的routes.php

use Phalcon\Mvc\Router;

$router = new Router();

$router->add(
    '/[a-z]{2}/register/',
    array(
        'controller' => 'index',
        'action' => 'register',
        'lang' => 1
    )
);

return $router;

这是我的 IndexController:

class IndexController extends ControllerBase
{
    public $lang;

    public function indexAction()
    {

    }

    public function registerAction($lang)
    {
        $lang = $this->dispatcher->getParam('lang');
        echo "Register ($lang)"; //test
    }

}

因此,如果我要访问 www.example.com/fr/register/,它将带我到 index 控制器,register 操作,带有 lang 参数 fr

但是,它没有在页面上显示$lang 变量。

我可以在 Phalcon documentation 中看到,除了在路由 (URL) 的末尾之外,您不能在任何地方使用 /:params 占位符,但这是在路由器中命名的正则表达式?

【问题讨论】:

    标签: php phalcon phalcon-routing


    【解决方案1】:

    你没看错,你只是忘记了 [a-z]{2} 周围的括号

    $router->add(
        '/([a-z]{2})/register/', // added brackets here
        array(
            'controller' => 'index',
            'action' => 'register',
            'lang' => 1
        )
    );
    

    现在您可以通过

    访问您的lang
    $lang = $this->dispatcher->getParam('lang');
    

    【讨论】:

    • 除了蒂莫西的回答之外,还有一个更短的版本:$router->add('/{lang:[a-z]{2}}/register', 'Index::register');
    • @NikiMihaylov,我也更喜欢短版!但有时它的可读性较差。
    猜你喜欢
    • 2017-08-18
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    • 2018-06-07
    相关资源
    最近更新 更多