我需要向几乎每个view
页发送相同的结果,因此我需要绑定variables
并随每个控制器一起返回。
我的示例代码
public function index()
{
$drcategory = DoctorCategory::orderBy('speciality', 'asc')->get();
$locations = Location::get();
return view('visitor.index', compact('drcategory','locations'));
}
public function contact()
{
$drcategory = DoctorCategory::orderBy('speciality', 'asc')->get();
$locations = Location::get();
return view('visitor.contact', compact('drcategory','locations'));
}
但是如您所见,我需要一遍又一遍地编写相同的代码。我该如何一次编写它并在需要时将其包含任何功能?
我曾考虑使用构造器,但我不知道该如何实现。
答案 0 :(得分:5)
您可以通过使用View::share()
中的AppServicerProvider
函数来实现此目的:
App \ Providers \ AppServiceProvider.php:
public function __construct()
{
use View::Share('variableName', $variableValue );
}
然后,在您的控制器内,按常规方式呼叫view
:
public function myTestAction()
{
return view('view.name.here');
}
现在您可以在视图中调用变量了:
<p>{{ variableName }}</p>
您可以在docs中阅读更多内容。
答案 1 :(得分:1)
有几种方法可以实现这一点。
您可以使用$('.ratings_stars').hover(
// Handles the mouseover
function() {
$(this).prevAll().addClass('ratings_over');
$(this).addClass('ratings_over');
$(this).nextAll().removeClass('ratings_vote');
},
// Handles the mouseout
function() {
$(this).prevAll().removeClass('ratings_over');
$(this).removeClass('ratings_over');
}
);
$('.ratings_stars').click(function() {
$('.ratings_stars').unbind('mouseout');
$(this).off('mouseout');
console.log('rating star clicked!')
var star = this;
var widget = $(this).parent();
$(this).prevAll().addClass('ratings_over');
$(this).addClass('ratings_over');
var clicked_data = {
clicked_on: $(star).attr('class'),
widget_id: widget.attr('id')
};
});
,service
,也可以按照您所说的在provider
内使用。
我猜想您将在代码的更多部分之间共享这一点,而不仅仅是constructor
,为此,如果代码简短且集中,我将对静态调用执行controller
。
如果您完全确定这只是service
的特例,则可以执行以下操作:
controller
最后,我仍然将您的查询放在服务或提供者下,并将其传递给控制器,而不是直接将其放在那里。也许还有其他值得探索的地方? :)
答案 2 :(得分:0)
@Sunil提到了View Composer Binding是实现此目的的最佳方法。
答案 3 :(得分:-1)
为此,您可以使用laravel的 View Composer绑定功能
将其添加到 AppServiceProvider
的启动功能中 View::composer('*', function ($view) {
$view->with('drcategory', DoctorCategory::orderBy('speciality', 'asc')->get());
$view->with('locations', Location::get());
}); //please import class...
在每个页面上访问时,每次都可以访问 drcategory 和 location 对象 无需从每个控制器发送 drcategory 和位置即可查看。
编辑您的控制器方法
public function index()
{
return view('visitor.index');
}