Php Silverstripe控制器
根据docu的说法,“我们需要定义这个控制器可以访问的URL。在我们的例子中,TeamsController应该在中可见,玩家的自定义操作在中。”。但是控制器被定义为Php Silverstripe控制器,php,content-management-system,silverstripe,Php,Content Management System,Silverstripe,根据docu的说法,“我们需要定义这个控制器可以访问的URL。在我们的例子中,TeamsController应该在中可见,玩家的自定义操作在中。”。但是控制器被定义为 <?php class TeamController extends Controller { private static $allowed_actions = array( 'players', 'index' ); public function i
<?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());
}
}
?>
这是正确的吗?TLDR强>
是的,理论上是正确的。除了一个小的打字错误
更长的答案
您希望在访问url时查看玩家列表。此URL包含四个部分:
TeamController
类。因此,我们需要定义一条路线,以便SilverStripe知道,从team开始的所有事情都应该由该控制器处理。我们在yml.config中定义路由,我更喜欢单独的路由文件,例如.*/mysite/_-config/routes.yml':
Name: mysiteroutes
After: framework/routes#coreroutes
---
Director:
rules:
'team//$Action/$ID/$Name': 'TeamController'
因此,任何以“team”开头的请求(在域之后)(注意,在您的示例中,您有teams,这是一个破坏一切的重要输入错误)都会被路由到TeamController
类和第二个参数(在我们的示例中为“players”)作为$Action
参数传递。TeamController
本身不知道第一部分,它只获取在路由中定义的其他参数
这由您的TeamController
类中的$allowed\u actions
映射:
private static $allowed_actions = array(
'players',
'index'
);
因此直接映射到呈现输出的播放器方法。TLDR;
是的,理论上是正确的。除了一个小的打字错误
更长的答案
您希望在访问url时查看玩家列表。此url包含四个部分:
协议http://
域名yoursite.com
域后的第一部分,/team
域后的第二部分,/player
协议和域由您的Web服务器通过SilverStripe安装进行解析。现在是/team。这应该映射到您的TeamController
类。因此,我们需要定义一个路由,以便SilverStripe知道,从team开始的所有事情都应该由该控制器处理。我们在yml.config中定义路由,我更喜欢单独的路由文件,例如.*/mysite/_config/routes.yml':
Name: mysiteroutes
After: framework/routes#coreroutes
---
Director:
rules:
'team//$Action/$ID/$Name': 'TeamController'
因此,任何以“team”开头的请求(在域之后)(注意,在您的示例中,您有teams,这是一个破坏一切的重要输入错误)都会被路由到TeamController
类和第二个参数(在我们的示例中为“players”)作为$Action
参数传递。TeamController
本身不知道第一部分,它只获取在路由中定义的其他参数
这由您的TeamController
类中的$allowed\u actions
映射:
private static $allowed_actions = array(
'players',
'index'
);
因此,直接映射到呈现输出的播放器
方法。请不要使用关闭?>
标记,它不是必需的,可能会破坏某些内容(例如自定义http头)如果不小心后面有空格或其他内容,因为它将直接输出。请不要使用closing?>
标记,它不是必需的,如果不小心后面有空格或其他内容,它可能会破坏某些内容(例如自定义http头),因为它将直接输出。