根据文档记录,“我们需要定义可以访问此控制器的URL。在我们的示例中,TeamsController应该在http://yoursite.com/teams/处可见,并且玩家自定义操作位于http://yoursite.com/team/players/。 ”。但控制器定义为
<?php
class TeamController extends Controller {
private static $allowed_actions = array(
'players',
'index'
);
public function index(HTTPRequest $request) {
// ..
}
public function players(HTTPRequest $request) {
print_r($request->allParams());
}
}
?>
配置:
Name: mysiteroutes
After: framework/routes#coreroutes
---
Director:
rules:
'teams//$Action/$ID/$Name': 'TeamController'
这是对的吗?
答案 0 :(得分:4)
<强> TLDR; 强>
是的,理论上它是正确的。除了一个小错字。
更长的答案
您希望在访问网址 http://yoursite.com/team/players/ 时看到播放器列表。该URL包含四个部分:
您的网络服务器通过SilverStripe安装解析协议和域。现在来了 / team 。这应该映射到您的TeamController
课程。因此,我们需要定义路由,因此SilverStripe知道,从 team 开始的所有内容都应该由此控制器处理。我们在yml.config中定义路由,我更喜欢路由的单独文件,例如* / mysite的/ _config / routes.yml':
Name: mysiteroutes
After: framework/routes#coreroutes
---
Director:
rules:
'team//$Action/$ID/$Name': 'TeamController'
因此,以“团队”一词开头的任何请求(在域之后)(请注意,在您的示例中,您有团队,这是打破一切的重要错字)被路由到{{1 }},并且第二个参数(在我们的示例中“players”作为TeamController
参数传递。$Action
本身不知道第一部分,它只是得到其他名称为你的参数在你的路线中定义它。
这是TeamController
类中的$allowed_actions
映射:
TeamController
因此直接映射到呈现输出的private static $allowed_actions = array(
'players',
'index'
);
方法。