Php Silverstripe控制器

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

根据docu的说法,“我们需要定义这个控制器可以访问的URL。在我们的例子中,TeamsController应该在中可见,玩家的自定义操作在中。”。但是控制器被定义为

<?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包含四个部分:

  • 协议http://
  • 域名yoursite.com
  • 域后的第一部分,/team
  • 域后的第二部分,/player
  • 协议和域由Web服务器通过SilverStripe安装进行解析。现在轮到你了。这应该映射到您的
    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头),因为它将直接输出。