2014-12-03 43 views
0

我使用etrepat/baum作曲家軟件包在我的Laravel 4應用程序中創建類別和子類別。問題是根據請求的類別是根還是孩子,網址應該有所不同。Laravel 4 - 用戶友好的URL

我有指定的路線:

Route::get('/store/categories/{urlname}', array(
    'as' => 'category', 
    'uses' => '[email protected]' 
)); 

因爲它是現在,這兩個類別和子類別將使用這條路線來獲得一個特定的類別,並經過一個網址,如:

/store/categories/{urlname} -where the urlname might be a category or a subcategory. 

我在我的控制器的功能,下面的查詢:

$category = Category::whereUrl_name($urlname)->with('seo')->first(); 

在數據庫中,類別表 - 如果創建子類別,它還會將其父類別的名稱存儲在parent_name字段中。

我試圖檢索與層次的類別,這樣的網址將根據不同:

- 如果請求的類別是根節點:

/store/categories/{urlname} 

- 如果所請求的類別是小孩:

/store/categories/{parent_name}/{urlname} 

關於如何解決這類問題的任何想法?

回答

1

路線

Route::get('/store/categories/{urlname}', array(
    'as' => 'category', 
    'uses' => '[email protected]' 
))->where('urlname', '(.*)?'); 

的功能StoreController

public function getCategories($urlname) {  

    $categories = explode('/', $urlname); 

    $main = Category::whereUrl_name(end($categories))->with('seo')->first(); 
    reset($categories); 

    if ($main) 
    { 
     $ancestors = $main->getAncestors(); 

     $valid = true; 

     foreach ($ancestors as $i => $category) 
     { 
      if ($category->url_name !== $categories[$i]) 
      { 
       $valid = false; 
       break; 
      } 
     } 

     if ($valid) 
     { 
      /* continue on with your code here ... */ 
     } 
    } 

    App::abort('404'); 
} 
+0

這不正是我所期待的。由於您的解決方案使用另一個函數的第二條路線來獲取子類別(getSubcategories)。此外,這將有一個網址,如:/ store/subcategories/{parent_name}/{urlname}。 – cch 2014-12-03 13:23:07

+0

我認爲這兩條路線是你自己定義的目標。那麼你應該澄清你的目標。所以你只想要第一條路線? {urlname}可以是一個類別或子類別,但我們不知道哪個是正確的?那麼你的問題是什麼?你期望從你的函數中得到哪個答案,如果是子類別,哪個答案?也許你可以在你的問題中提供一個示例數據? – 2014-12-03 13:43:32

+0

我試圖實現的目標是使url:example.com/store/categories/[category_urlname](Parent) example.com/store/categories/[parent_name]/[category_urlname](Child,Has Parent)。現在的問題是,如果是父母或孩子將使用:example.com/store/categories/[category_urlname] – cch 2014-12-03 14:07:16