Phalcon中的路由——路由结束前的参数

Routing in Phalcon - parameter before the end of the route

我正在尝试在 Phalcon 中设置路由,遵循这个 URL 结构:

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 中看到你不能在任何地方使用 /:params 占位符,但在路由的末尾 (URL),但这是一个被命名的正则表达式在路由器内?

你没看错,只是忘记了 [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');