我有以下路由设置。
$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
,~23
和23
是控制器默认操作(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
有人可以帮助我吗,我在这里做错了什么? 谢谢
答案 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)