2013-08-02 82 views
3

我正在設置路由到控制器,並且不斷收到404或「銀河系框架入門」頁面。控制器路由不按預期在銀條中工作3.1

在routes.yaml我:

--- 
Name: nzoaroutes 
After: framework/routes#coreroutes 
--- 
Director: 
    rules: 
    'view-meetings/$Action/$type': 'ViewMeeting_Controller' 

我的控制器看起來是這樣的:

class ViewMeeting_Controller extends Controller { 

    public static $allowed_actions = array('HospitalMeetings'); 

    public static $url_handlers = array(
     'view-meetings/$Action/$ID' => 'HospitalMeetings' 
    ); 

    public function init() { 
    parent::init(); 
    if(!Member::currentUser()) { 
     return $this->httpError(403); 
    } 
    } 

    /* View a list of Hospital meetings of a specified type for this user */ 
    public function HospitalMeetings(SS_HTTPRequest $request) { 

    print_r($arguments, 1); 

    } 
} 

而且我已經創建了一個模板(ViewMeeting.ss),單純輸出$內容,但當我刷新站點緩存並訪問/查看會議/ HospitalMeetings/6?flush = 1

我得到默認的'Silverstripe框架入門'頁

我知道routes.yaml路由工作,因爲如果我改變路線那裏,參觀古老的URL,我收到了404,但請求似乎並沒有解僱我的$行動......

回答

0

我在這裏做了一些猜測,但如果你放棄了

public static $url_handlers = array(
    'view-meetings/$Action/$ID' => 'HospitalMeetings' 
); 

部分和更改的操作方法是什麼:

// View a list of Hospital meetings of a specified type for this 
public function HospitalMeetings(SS_HTTPRequest $request) { 

// Should print 8 if url is /view-meetings/HospitalMeetings/6 
print_r($request->param('type'); 

}

2

您在YAML和控制器中有兩條不同的規則($ type vs $ ID)。另外,我不認爲你需要在YAML和Controller中定義路由。

試試這個,YAML告訴SS發送以'view-meetings'開頭的所有內容到您的Controller,然後$url_handlers告訴Controller如何處理請求,具體取決於URL中'view-meetings'之後的所有內容。

routes.yaml

--- 
Name: nzoaroutes 
After: framework/routes#coreroutes 
--- 
Director: 
    rules: 
    'view-meetings': 'ViewMeeting_Controller' 

ViewMeeting_Controller.php

class ViewMeeting_Controller extends Controller { 

    private static $allowed_actions = array('HospitalMeetings'); 

    public static $url_handlers = array(
     '$Action/$type' => 'HospitalMeetings' 
); 

    public function init() { 
    parent::init(); 
    if(!Member::currentUser()) { 
     return $this->httpError(403); 
    } 
    } 

    public function HospitalMeetings(SS_HTTPRequest $request) { 
    } 
} 
2

對路由的Silverstripe文檔不是在這一點上都清楚,但對於$Action正確解釋應該使用雙斜槓之前它在routes.yml文件中:

view-meetings//$Action/$type

根據the documentation,這設置了一個叫做'轉換點'的東西。具體到什麼意思在文檔或source code中沒有很好地描述,這些URL與規則匹配。