参数传递给默认操作后,路由不起作用

时间:2019-02-18 10:53:38

标签: php phalcon phalcon-routing

我有以下路由设置。

$router->add('/schools', array(
    'module' => 'schools',
    'namespace'=>'MyNameSpace\Schools\Controllers\\',
    'controller'=>'index',
    'action' => 'index'
));

$router->add('/schools/:params",array(
    'module' => 'schools',
    'namespace'=>'MyNameSpace\Schools\Controllers\\',
    'controller'=>'index',
    'action' => 'index',
    'params' => 1
));

问题:

1.  http://www.example.com/schools/23 

工作正常

2.  http://www.example.com/schools/~23

也可以

但是

3.  http://www.example.com/schools/school-name

不起作用, 上述网址中的school-name~2323是控制器默认操作(index)的参数。

我无法使用控制器的initialize方法打印任何内容。尝试也尝试将main的{​​{1}}方法放在第一位,没有错误。

执行上述第三个URL时,我什么也不能打印,我只是在浏览器上打印了index.php,没有其他错误。 然后,我在1中打印匹配的路由路径,它给出了

http://www.example.com/schools/~23

按照路线,对象被打印在Phalcon\Mvc\Router\Route Object ( [_pattern:protected] => /schools/:params [_compiledPattern:protected] => #^/schools(/.*)*$# [_paths:protected] => Array ( [module] => schools [namespace] => MyNameSpace\Schools\Controllers\ [controller] => index [action] => index [params] => 1 ) [_methods:protected] => [_hostname:protected] => [_converters:protected] => [_id:protected] => 34 [_name:protected] => [_beforeMatch:protected] => [_group:protected] => )

http://www.example.com/schools/23

更新 令人惊讶的是,跟随网址也可以

Phalcon\Mvc\Router\Route Object ( [_pattern:protected] => /schools/:action/:params [_compiledPattern:protected] => #^/schools/([a-zA-Z0-9\_\-]+)(/.*)*$# [_paths:protected] => Array ( [module] => schools [namespace] => MyNameSpace\Schools\Controllers\ [controller] => index [action] => 1 [params] => 2 ) [_methods:protected] => [_hostname:protected] => [_converters:protected] => [_id:protected] => 36 [_name:protected] => [_beforeMatch:protected] => [_group:protected] => ) 而不是http://www.example.com/schools/~school-name

http://www.example.com/schools/school-name

有人可以帮助我吗,我在这里做错了什么? 谢谢

1 个答案:

答案 0 :(得分:1)

如果您看到此[_pattern:protected] => /schools/:action/:params 并且您的代码没有此规则,那么它看起来就像应用了默认路由。

使用Router创建false以禁用默认路由。

在Phalcon代码中,显然已将其设置为使用默认值:https://docs.phalconphp.com/3.4/en/api/Phalcon_Mvc_Router

public function __construct(bool! defaultRoutes = true)