我得到了一個情況,我有一個控制器負責返回視圖與需要顯示它的一些數據,但這些數據應該從多個視圖中顯示。重構控制器PHP/Laravel
讓我們舉個例子(不是真正的類,但只是得到的想法):
class UserMapController extends BaseController
{
public function index($username)
{
$posts = Post::all();
$userInfo = User::findByUsername(username);
$otherData = Book::all();
return View::make('user.profile',compact('posts','userInfo','otherData'));
}
public function albums($username)
{
$posts = Post::all();
$userInfo = User::findByUsername(username);
$otherData = Book::all();
$album = Album::findByUsername($username);
return View::make('user.albums',compact('posts','userInfo','otherData','username','album'));
}
}
在這種情況下,默認的數據是$posts
,$userInfo
,$otherData
我可以在其他10種方法使用它會將它發送到視圖。
我在laravel中使用了View Composer
,非常有幫助,但在這種情況下,問題是我從url獲得值,所以我無法執行乾淨動態的作曲家視圖(糾正我,如果我錯了)。
你怎麼做這種重構,當你需要新的數據發送到所有這些意見不會痛苦地插入它?
好的,謝謝我不知道這個技術,但是我仍然看不到很多動態因爲我仍然需要編寫變量來傳遞每個視圖的'make'方法。如我錯了請糾正我。另外一個解釋是你說使用'Route :: parameter('nameOfParam')'的地方是因爲使用'before'過濾器的參數作爲該方法的參數? – Fabrizio
您對Route :: parameter()的需求斷言是正確的。至於不需要在每個操作中將它們插入到視圖層中,只需使用View :: share()或者只需在控制器中編寫一個輔助方法來準備給定的視圖,並從過濾器中加載參數,然後添加其他視圖參數。這會很好地抽象邏輯並仍然允許修改。 – machuga
'Route :: parameter'和'Route :: input'有什麼區別? –