我有一个Laravel项目,我试图从名为nav.blade.php
的刀片文件中调用一个控制器函数,但我得到了以下错误:
语法错误,意外的完全限定名称"\App\Http\Controllers\ProductC&";,期望":&";。
nav.blade.php
{{ use AppHttpControllersProductController; }}
<div class="container">
<ul class="navbar-nav mr-auto">
{{ $is_admin = ProductController::isAdmin(); }}
@if($is_admin == "admin")
<li class="nav-item">
<a class="nav-link" href="/posts">Admin</a>
</li>
@endif
</ul>
</div>
ProductsController.php
public static function isAdmin()
{
$user_id = Auth::id();
$user = User::findOrFail($user_id);
$is_admin = $user->role;
if($is_admin==="admin"){
return "admin";
}elseif($is_admin==="moderator"){
return "moderator";
}else{
return "user";
}
}
{{ }}
用于echo
任何您想要的内容。如果你想导入一个类,一个解决方案是这样做:
<?php
use AppHttpControllersProductController;
$is_admin = ProductController::isAdmin();
?>
<div class="container">
<ul class="navbar-nav mr-auto">
@if($is_admin == "admin")
<li class="nav-item">
<a class="nav-link" href="/posts">Admin</a>
</li>
@endif
</ul>
</div>
但这不是最佳实践,我建议您将isAdmin()
方法从ProductController
中移除,并将其设置为系统的全局函数,这样您就可以直接从视图中访问它,而无需导入控制器。
永远不要在刀片中使用控制器。这在任何方面都不好,需要我在一些博客中做出很多解释。。。
控制器仅用于通过URL访问某些内容,执行某些操作并完成,它不是Service
类,您可以在其中任意位置执行业务逻辑。
因此,将该方法移动到Service
类(不要与Service Provider
混淆(,并在刀片中使用它。最好还是将该变量传递给视图,而不是仅为此使用任何类。。。
您可以从刀片模板访问静态控制器功能。
<?php
$isAdmin= AppHttpControllersProductController::isAdmin();
?>