Laravel从刀片文件调用控制器函数不工作



我有一个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();
?>

相关内容

  • 没有找到相关文章

最新更新