2013-10-14 77 views
1

我對laravel很新穎,從我在laravel MVC應用程序中看到的,大多數教程使用控制器通過View::make('[PATH]')返回視圖,因此典型場景將會像這樣: 應用程序/ routes.php文件更好的路線和創建視圖

Route::get('search', array(
     'uses' => '[email protected]', 
     'as' => 'search.index' 
    )); 
    Route::get('search_result', array(
     'uses' => '[email protected]', 
     ' 
    )); 

應用程序/控制器/ SearchControllers.php

public function newSearch() 
    { 
     return View::make('search'); 
    } 

    public function runSearch() 
    { 
     //validate and query search 

     return View::make('search') 
      ->with('result',$result); 
    } 

哪個都好,但如果以後Ø ñ我們決定重組視圖並將search.php放在web/search.php例如以及其他相關的視圖,我們是不是必須跟蹤所有控制器來更新視圖的路徑?

取而代之的,是沒有任何缺點,如果我是做route.php爲「查看工廠」,而不是像這樣:

Route::get('search', array('as' => 'search.index', function() 
    { 
     return View::make('search'); 
    })); 
    Route::get('search_query', array(
     'uses' => '[email protected]' 
    )); 
    Route::get('search_result', array('as' => 'search.result', function() 
    { 
     return View::make('search') 
      ->with('result',Session::get('result')); 
    })); 

這將仍然有效,但需要一個額外的途徑,使該視圖,但如果我們需要重構或更改視圖的名稱,我們只需跟蹤並更新route.php

那麼將有任何問題用控制器寫這條路線?或者還有其他更好的方法來將視圖路徑從控制器中抽象出來嗎?

回答

0

顯然routes.php應該只包含有關路由的信息。它不應該包含任何企業登錄,這是控制器。因此,現在你的路線我會說這很好,但如果你需要添加一些業務邏輯到你的路線,那麼你需要將它移動到控制器並修改你的路線。我認爲在控制器中比在routes.php中更好。

根據您打算實現的功能,還可以使用resourceful controllers & routing

+0

那麼在這個例子中,我並沒有附加修改後的控制器的任何代碼,但是我不會在路由上做任何業務邏輯處理,因爲這是控制器的用途,除非您指的是附件參數(結果)作爲業務邏輯。我得到這是如何編寫MVC應用程序的常見做法,但我只是想知道在這種情況下,如果有更好的方式來返回View,除了編寫一個RESTful控制器。 – har2vey

+0

@ har2vey我在說你現在所擁有的東西我可以接受,但是除了單一的回報之外,任何東西都應該在控制器中。 –

0

您可以隨時在您的課程中創建一個用於存儲視圖名稱的屬性,並在您想創建視圖時調用該屬性。