我對Ruby on Rails非常新手。就在幾個小時前開始學習Ruby和Ruby on Rails,並試圖將其DRY原則應用到我自己的Laravel代碼中。Laravel是否具有Rails的before_filters將變量綁定到控制器方法中?
這是我的回報率看起來像:
class WeddingController < ApplicationController
before_filter :get_wedding
def get_wedding
/*
If Wedding.find(2) returns false, redirect homepage
Else, bind @wedding into all methods for use
*/
end
def edit
@wedding //this method has access to @wedding, which contains Wedding.find(2) data.
end
def update
//Same as above method
end
def destroy
//Same as above method, can do things like @wedding.destroy
end
end
這是我Laravel看起來像
class Wedding_Controller extends Base_Controller {
public function edit($id)
{
if(Wedding::find($id) === false)
return Redirect::to('/);
//Edit code
}
public function update($id)
{
if(Wedding::find($id) === false)
return Redirect::to('/);
//Update code
}
public function destroy($id)
{
if(Wedding::find($id) === false)
return Redirect::to('/);
//Destroy code
}
}
- 我怎麼可以幹
if(Wedding::find($id) === false)
檢查,像我RoR的代碼? - 如果
Wedding::find($id) returns actual Wedding data
,我如何在所有指定的方法中將它注入爲$wedding variable
? (如果可能的話,不要尋找任何使用類範圍的東西。)
非常感謝!
Ps。對於不瞭解我的RoR腳本的人員;基本上它是這樣做的。
Before any method call on this controller, execute get_wedding method first.
If get_wedding can't find the wedding in database, let it redirect to homepage.
If get_wedding finds the wedding in database, inject returned value as @wedding variable to all methods so they can make use of it. (e.g destroy method calling @wedding.destroy() directly.)
我不是Laravel的專家,所以我不知道我的控制器是否是資源控制器。我會打穀歌,看看是什麼資源控制器。不熟悉條款。 – Aristona
如果你使用'Route :: resource'函數,它是一個資源控制器。請參閱http://laravel.com/docs/controllers#resource-controllers –
不,我所有的方法調用都是直接調用。喜歡; Route :: get('something/{id}','SomethingController @ show'); – Aristona