2016-09-27 44 views
2

我想獲取URL中的最後一個段落傳遞給我的控制器以用作過濾器的參數。不幸的是,我總是收到一個沒有找到頁面的錯誤。Silverstripe 3.4 - 路由返回頁面未找到

示例網址:/行業/類別/能源

Routes.yml:

--- 
Name: mysiteroutes 
After: framework/routes#coreroutes 
--- 
Director: 
    rules: 
    'sectors': 'BlogPostsPage_Controller' 

我的控制器:

class BlogPostsPage_Controller extends Page_Controller { 

private static $url_handlers = array(
    '$ID' => 'News', 
); 

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

public function News(SS_HTTPRequest $request) 
{ 
    $news = BlogPost::get() 
     ->filter(array(
     'Categories.URLSegment' => '', 
     'Tags.Title' => 'News' 
     )) 
     ; 
    return $this->render(); 
    } 
} 

做一個調試表明,ID是能源但這是遠隨着它的到來。

我錯過了什麼嗎?

感謝

+0

你有沖洗嗎?另外https://github.com/NightJar/ssrigging-slug是一個很好的模塊,您可以使用此功能。 – wmk

+0

我不認爲你需要'框架/路線#coreroutes',相當肯定你只需要'#coreroutes' – zanderwar

回答

1

你不定義Category一部分是你給的網址。 SilverStripe現在正在尋找一條符合Category/Energy的路線,它找不到它 - 因爲它尚未定義。

所以,如果Category是一個變量,你可以在你的$url_handlers定義它像這樣

BlogPostsPage_Controller

private static $url_handlers = array(
    '$Category/$ID' => 'News', 
); 

OR

如果它不是一個變量你可以只將其設置在您的routes.yml這樣的

routes.yml

'sectors/category': 'BlogPostsPage_Controller' 

無論哪種方式,你應該改變,以使其工作在兩個文件中的一個。