我得到了一个情况,我有一个控制器负责返回视图与需要显示它的一些数据,但这些数据应该从多个视图中显示。重构控制器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'有什么区别? –