【问题标题】:Cannot find the way to make @if statement works in blade找不到使 @if 语句在刀片中起作用的方法
【发布时间】:2021-04-22 18:08:54
【问题描述】:

我正在制作一个“教师”应用程序,我想制作一个登录页面,该页面会根据数据库中是否有注册用户而变化。

如果数据库中没有身份验证用户,我想制作一个重定向按钮到创建用户页面,如果数据库有一个或多个用户,我想制作一个选择用户视图。

问题是我不知道该怎么做,因为视图总是向我显示第一条语句(我在 if 中得到的),如果数据库中有注册用户也是如此。谁能帮我解决这个问题?

这是刀片文件:

@if (empty(Auth::user()->id))
  <div class="grid-item" id="grid-item5">
    <div id="title">
      <h1>Welcome</h1>
      <p>We see there aren't users</p>
    </div>
    <div id="loginForm">
      <button type="button" onclick="window.location='{{ url("/newUser") }}'">Button</button>
    </div>
  </div>
@else
  <div class="grid-item" id="grid-item5">
    <div id="title">
      <h1>Select an user</h1>
    </div>
    <div id="loginForm"></div>
  </div>
@endif

这里有控制器索引方法:

public function index()
{
  $users = User::all();
  return view('/', compact('users'));
}

最后你有了页面:

【问题讨论】:

  • 请将相关代码作为文本而不是图像。与图片不同,文本可以轻松复制和搜索(也不会在未来成为断开的链接)。
  • @El_Vanja 对不起!我没想到,我只是编辑了这个问题。感谢您的建议!
  • 那么您的问题没有解决,您是否只想在数据库中有用户时才重定向?
  • 我想你的问题是你想检查数据库中是否有用户?
  • @user1994 不,如果数据库中没有用户,我想显示一个将您重定向到创建用户页面的按钮,如果数据库中有用户,我想显示所有用户可以登录。问题是我不知道如何使用 if 来做到这一点

标签: php laravel laravel-blade laravel-8


【解决方案1】:

以下代码是它的示例,请相应地替换代码

@if(!$user)
   //show button
@else
  //dont show button
@endif

【讨论】:

    【解决方案2】:

    我认为你的问题是你想检查数据库中是否有用户。

    因此无需检查用户是否通过身份验证,而是检查数据库中是否有用户。

    在你的控制器中

    public function index() {
      return view('/', ['users' => User::all()]);
    }
    

    在你的刀片文件中

    @if(!$users)
        <div class="grid-item" id="grid-item5">
            <div id="title">
                <h1>Welcome</h1>
                <p>We see there aren't users</p>
            </div>
            <div id="loginForm">
                <button type="button" onclick="window.location='{{ url("/newUser") }}'">Button</button>
            </div>
        </div>
    @else
        <div class="grid-item" id="grid-item5">
            <div id="title">
                <h1>Select an user</h1>
            </div>
            <div id="loginForm"></div>
        </div>
    @endif
    

    【讨论】:

    • 是的,这是我想做的,所以我只是尝试这样做,但它抛出了“未定义的变量:用户”错误。
    • 你的刀片文件名是什么,它在哪里,有文件夹吗?例如,您应该在控制器索引中定义 view('yourviewname',['users' => User::all()]);
    • 不行,我试试在controller里面做个函数,把blade里面的@if语句删掉
    【解决方案3】:

    此函数将获取当前经过身份验证的用户:Auth::user()。我猜你想要实现的是@if(empty($users)) 其中$users 是你在控制器上传递的变量。

    如果您想验证访问该视图的用户是否经过身份验证,您只需使用@auth@guest

    另外我建议您将按钮更改为&lt;a&gt; 标签,您的href 将是&lt;a href="{{ route('route.name') }}",其中route.name 将在您的路线文件中定义。

    在您的控制器中:

    您可以在名为 users 的视图中创建一个文件夹,然后创建 index.blade.php (views/users/index.blade.php)

    public function index()
    {
        $users = Users::all();
    
        return view('users.index')->with('users', $users);
    }
    

    在你看来:

    @if(count($users) < 1)
    ...
    @else
    ...
    @endif
    

    count 正在验证 $users 数组长度是否小于 1(换句话说,如果数组为空)。

    你也可以isEmpty()

    @if($users->isEmpty())
    ...
    @else
    ...
    @endif
    

    【讨论】:

    • 似乎工作正常,只是当数据库有寄存器时,else语句不会抛出,所以视图也不会改变
    • 对不起,我听不懂你说的,如果你在那个列上没有数据会抛出一个空数组,你也可以使用count(),看看我更新的答案。
    • 对不起,我在睡觉:)。它不起作用,引发“未定义变量:$users”错误。
    • 没关系,尝试在 html 上输出 $users,只需在刀片文件中的某处添加 {{ $users }},如果您能看到输出,则表示该变量已签名,否则您必须在某处拼写错误并且您必须在您的控制器上进行验证。也去你的控制器,只需声明 $users = "some text";看看你是否可以在刀片(视图)上使用该变量。
    • 这是一个拼写错误,请确保在您的控制器中传递正确的名称值:return view('users.index')->with('users', $users);跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    • 2017-08-18
    • 2019-11-11
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多