Laravel,从 blade 模板文件调用控制器方法
Laravel, calling controller method from blade template file
嘿伙计们!我使用 Laravel 5.4,本地主机的 WAMP。我正在努力解决在我的 header.blade.php
文件中调用 Controller@methodName
的问题,因为我想在我的 header.blade.php 文件中显示用户的所有通知。通常我是在不同页面的路由帮助下获取所有需要的数据。但是对于这种情况,我需要在不使用路由的情况下进行调用。这是我的代码 NotificationController
:
class NotificationController extends Controller
{
public function getNotification(){
$notifications = Notification::where('user_id',Auth::user()->id)->get();
$unread=0;
foreach($notifications as $notify){
if($notify->seen==0)$unread++;
}
return ['notifications'=>$notifications, 'unread'=>$unread];
}
}
而且我应该在头文件中收到所有这些数据。我用过:{{App::make("NotificationController")->getNotification()}}
和 {{NotificationController::getNotification() }} 但是它说 Class NotificationController does not exist
。请帮忙!
您可以在 User
模型中创建一个关系方法来检索属于用户的所有通知并可以使用 Auth::user()->notifications
,而不是调用控制器方法来获取通知。例如:
// In User Model
public function notifications()
{
// Import Notification Model at the top, i.e:
// use App\Notification;
return $this->hasMany(Notification::class)
}
在您的 view
中,您现在可以使用如下内容:
@foreach(auth()->user()->notifications as $notification)
// ...
@endforeach
关于您当前的问题,您需要使用完全限定的命名空间来创建控制器实例,例如:
app(App\Http\Controllers\NotificationController::class)->getNotification()
尝试使用完整的命名空间:
例如,App\Http\Controllers\NotificationController::getNotification
但是,当然,控制器并不是按照您使用它们的方式来命名的。它们适用于路线。更好的解决方案是像这样在用户模型中添加关系:
public function notifications()
{
return $this->hasMany(Notification::class)
}
然后像这样在您的视图中使用它:
@foreach(Auth::user()->notifications as $notification)
嘿伙计们!我使用 Laravel 5.4,本地主机的 WAMP。我正在努力解决在我的 header.blade.php
文件中调用 Controller@methodName
的问题,因为我想在我的 header.blade.php 文件中显示用户的所有通知。通常我是在不同页面的路由帮助下获取所有需要的数据。但是对于这种情况,我需要在不使用路由的情况下进行调用。这是我的代码 NotificationController
:
class NotificationController extends Controller
{
public function getNotification(){
$notifications = Notification::where('user_id',Auth::user()->id)->get();
$unread=0;
foreach($notifications as $notify){
if($notify->seen==0)$unread++;
}
return ['notifications'=>$notifications, 'unread'=>$unread];
}
}
而且我应该在头文件中收到所有这些数据。我用过:{{App::make("NotificationController")->getNotification()}}
和 {{NotificationController::getNotification() }} 但是它说 Class NotificationController does not exist
。请帮忙!
您可以在 User
模型中创建一个关系方法来检索属于用户的所有通知并可以使用 Auth::user()->notifications
,而不是调用控制器方法来获取通知。例如:
// In User Model
public function notifications()
{
// Import Notification Model at the top, i.e:
// use App\Notification;
return $this->hasMany(Notification::class)
}
在您的 view
中,您现在可以使用如下内容:
@foreach(auth()->user()->notifications as $notification)
// ...
@endforeach
关于您当前的问题,您需要使用完全限定的命名空间来创建控制器实例,例如:
app(App\Http\Controllers\NotificationController::class)->getNotification()
尝试使用完整的命名空间:
例如,App\Http\Controllers\NotificationController::getNotification
但是,当然,控制器并不是按照您使用它们的方式来命名的。它们适用于路线。更好的解决方案是像这样在用户模型中添加关系:
public function notifications()
{
return $this->hasMany(Notification::class)
}
然后像这样在您的视图中使用它:
@foreach(Auth::user()->notifications as $notification)