如何修改Nette应用的URL格式为模块/动作形式?
解决Nette框架模块化URL格式问题
1. 调整路由配置
原路由没区分模块、Presenter和Action,才导致URL用点分隔。直接替换成带模块参数的路由规则:
// 替换原有路由代码 $router->addRoute('<module>/<presenter>/<action>[/<id>]', [ 'module' => 'Home', 'presenter' => 'Home', 'action' => 'default' ]);
要是需要支持直接访问域名跳首页,再加一条 fallback 路由:
// 可选:默认首页路由 $router->addRoute('', [ 'module' => 'Home', 'presenter' => 'Home', 'action' => 'default' ]);
2. 修正n:href调用格式
原来的n:href=":Home:Signout:default"开头带冒号,改成不带冒号的格式:
<a class="nav-link active" n:href="Home:Signout:default">Sign Out</a>
这样Nette会自动按新路由生成/home/signout/格式的链接。
3. 确认Presenter映射配置
你当前common.neon里的映射是对的,不用改:
*: App\Modules\*\Presenters\*Presenter
它会自动把Home:Signout解析成App\Modules\Home\Presenters\SignoutPresenter。
4. 清缓存
改完路由和配置后,一定要删掉Nette的缓存目录(一般是temp/cache),不然新配置不会生效。
做完这些,URL就会变成http://192.168.56.30/home/signin/的友好格式,访问和生成链接都正常。
内容的提问来源于stack exchange,提问作者Lawrence Cooke
相关产品推荐
相关产品推荐

