2016-11-24 112 views
0

根據文件,「我們需要定義該控制器可以訪問的URL,在我們的例子中,TeamsController應該在http://yoursite.com/teams/可見,並且玩家自定義動作在http://yoursite.com/team/players/。」。但控制器被定義爲Silverstripe控制器文檔混淆

<?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' 

這是正確的嗎?

+3

請不要使用關閉'?>'標籤,這是不需要的,如果您意外地有一個空格或其他東西,它可能會破壞某些東西(例如自定義http標頭),因爲它會直接輸出。 – wmk

回答

4

TLDR;

是的,理論上是正確的。在一個小錯字旁邊。

再回應

你想看到的球員名單,當你訪問的網址http://yoursite.com/team/players/。這個URL包含四個部分:

  1. 協議HTTP://
  2. yoursite.com
  3. 域,/團隊
  4. 的第二部分之後的第一部分域名後,/player

P您的網絡服務器使用您的SilverStripe安裝來解析rotocol和域名。現在來到/團隊。這應該映射到您的TeamController類。因此,我們需要定義一個路線,所以SilverStripe知道,所有以團隊開頭的東西都應該由此控制器處理。我們在yml.config中定義路由,我更喜歡路由的單獨文件,例如*/mysite的/ _config/routes.yml「:

Name: mysiteroutes 
After: framework/routes#coreroutes 
--- 
Director: 
    rules: 
    'team//$Action/$ID/$Name': 'TeamController' 

於是開始用字的任何請求(域名之後)‘團隊’(注意,在你的榜樣,你有團隊,這是一個重要的錯字是打破了一切)被路由到TeamController類,並且第二個參數(在我們的例子中「players」被傳遞爲$Action參數。TeamController本身不知道第一部分,它只是獲取其他參數,

這是在您的TeamController類中的$allowed_actions所映射的:

private static $allowed_actions = array(
    'players', 
    'index' 
); 

並因此直接映射到呈現輸出的players方法。