【问题标题】:Laravel calling controller function from blade file not workingLaravel 从刀片文件调用控制器功能不起作用
【发布时间】:2021-09-26 10:38:26
【问题描述】:

我有一个 Laravel 项目,我试图从名为 nav.blade.php 的刀片文件中调用控制器函数,但出现以下错误:

语法错误,意外的完全限定名称 “\App\Http\Controllers\ProductC...”,期待“:”。

nav.blade.php

{{ use \App\Http\Controllers\ProductController; }}

<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";
        } 
    }

【问题讨论】:

  • 您试过{{dd($is_admin)}} 来检查它实际包含的内容吗?另外,为什么不在用户模型中将此作为方法/属性? Auth::user() 将为您提供当前经过身份验证的用户

标签: laravel


【解决方案1】:

{{ }} 用于echo 任何你想要的东西。如果要导入一个类,一种解决方案是执行以下操作:

<?php
    use \App\Http\Controllers\ProductController;  
    $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 移动并将其设置为系统的全局函数,这样您就可以直接从视图中访问它,而无需导入控制器。

【讨论】:

    【解决方案2】:

    永远不要在 Blade 中使用控制器。这在任何方面都不好,需要我在一些博客中进行大量解释......

    控制器仅用于通过 URL 访问某事,做某事并完成,它不是一个 Service 类,您可以在其中执行任何您想要的业务逻辑。

    因此,将该方法移至Service 类(不要与Service Provider 混淆)并在刀片中使用它。最好将该变量传递给视图,而不是为此使用任何类...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2019-01-31
      • 2018-07-06
      • 2017-02-20
      • 2022-09-30
      • 2016-05-31
      • 2019-08-23
      相关资源
      最近更新 更多