2013-08-16 282 views
1

我目前正在試圖在索引頁上創建一個允許用戶創建項目的鏈接。我routes.php文件看起來像無法生成URL

Route::controller('items', 'ItemController'); 

和我ItemController看起來像

class ItemController extends BaseController 
{ 
    // create variable 
    protected $item; 

    // create constructor 
    public function __construct(Item $item) 
    { 
    $this->item = $item; 
    } 

    public function getIndex() 
    { 
    // return all the items 
    $items = $this->item->all(); 

    return View::make('items.index', compact('items')); 
    } 

    public function getCreate() 
    { 
    return View::make('items.create'); 
    } 

    public function postStore() 
    { 
    $input = Input::all(); 

    // checks the input with the validator rules from the Item model 
    $v = Validator::make($input, Item::$rules); 

    if ($v->passes()) 
    { 
     $this->items->create($input); 

     return Redirect::route('items.index'); 
    } 

    return Redirect::route('items.create'); 
    } 
} 

我曾試圖改變getIndex()只指數(),但然後我得到找不到控制器的方法。所以,這就是我使用getIndex()的原因。

我想我已正確設置我的創建控制器,但是當我去的項目/創建網址我得到一個

無法生成用於命名路線「items.store」這樣路線的網址不存在。

錯誤。我試過使用store()和getStore()而不是postStore(),但我一直得到相同的錯誤。

有人知道問題可能是什麼?我不明白爲什麼網址沒有被生成。

+1

** + 1用於發佈_broad代碼sample_與您的問題!** –

回答

1

您正在使用路線::控制器(),它的確據我所知生成路徑名。

即你指的是「items.store」 - 這是一個路由名稱。

你應該;

如果使用路由::資源 - 那麼你就需要改變你的控制器名稱

+0

Ohhhh我誤解了控制器和資源。好的,這是有道理的。謝謝! –

+0

這個答案與[類似問題](http://stackoverflow.com/q/283​​88716/3334390)有什麼關係?我有,使用Stylesheets函數加載同一文件夾中的一個文件,但另一個文件不是?在我的例子中,沒有必要定義到樣式表的路由,這是自動發生的。 –

0

的這個錯誤告訴你,那路線名稱尚未定義:

無法生成用於命名路線「items.store」一個URL 這樣路由不存在

查看Named Routes section中的Laravel 4 Docs。有幾個的例子,這會讓你清楚如何使用這些類型的路線。

也看看RESTful Controllers section

這裏是你的問題的例子:

Route::get('items', array(
    'as' => 'items.store', 
    'uses' => '[email protected]', 
)); 
0

爲轉移Exchange表示,Route :: controller()不會生成名稱,但可以使用第三個參數進行操作:

Route::controller( 'items', 
        'ItemController', 
        [ 
         'getIndex' => 'items.index', 
         'getCreate' => 'items.create', 
         'postStore' => 'items.store', 
         ... 
        ] 
);