在视图上显示代码时,将显示错误消息。就是
未定义变量:noti_count(视图:C:\ laravel \ Procure \ resources \ views \ layouts \ user.blade.php)
我还不习惯在controller中使用视图共享。需要一些指导:
public function __construct()
{
if (Auth::check())
{
if (Auth::User()->role == "Normal User")
{
$noti_count = Notification
::where('receive_id','=',Auth::user()->id)
->count();
view()->share('noti_count', $noti_count);
}
else if (Auth::User()->role == "PWD")
{
# code...
}
elseif (Auth::User()->role == "Senior Citizen")
{
# code...
}
else
{
}
}
}
刀片视图代码
<span class="badge badge-danger badge-counter">{!! $noti_count !!}+</span>
答案 0 :(得分:3)
view()->share()
应该在服务提供商的启动程序中使用。
您可以使用 AppServiceProvider ,或者创建一个新的提供程序,并且不要忘记将其添加到 config / app.php 中的提供程序数组的末尾。 / p>
注意,当没有用户登录时,$noti_count
将是未定义的。因此,您必须先检查它:
@isset($noti_count)
<span class="badge badge-danger badge-counter">{!! $noti_count !!}+</span>
@endisset
答案 1 :(得分:1)
您可以查看文档的Sharing Data Will All Views部分。它说:
使用所有视图共享数据
有时,您可能需要与所有视图共享一条数据 由您的应用程序呈现。您可以使用视图来这样做 门面的
share
方法。通常,您应该致电share
在服务提供商的boot
方法中。您可以随意将它们添加到AppServiceProvider
或生成单独的服务提供商以 安置他们:<?php namespace App\Providers; use Illuminate\Support\Facades\View; class AppServiceProvider extends ServiceProvider { /** * Register any application services. * * @return void */ public function register() { // } /** * Bootstrap any application services. * * @return void */ public function boot() { View::share('key', 'value'); } }
如您所见,这有助于跨多个视图共享数据。您当然可以这样做(文档非常清楚),但是如果您要做一些条件操作,为什么不将数据返回视图呢?像这样:
public $data;
public function __construct()
{
if ($condition)
{
$this->data = 'Data for first option';
}
else if ($condition_two)
{
$this->data = 'Some other data';
}
else
{
$this->data = 'Another amount of data';
}
}
然后进入控制器内部的方法:
public function myMethod()
{
// some stuff
return view('my_view')->withData($this->data);
}
答案 2 :(得分:0)
public function __construct()
{
\View::share('key','value');
}
然后在刀片文件中:
<span class="badge badge-danger badge-counter">{{ $key }}</span>