@if 语句不起作用

@if statement doesn't works

晚上好,我正在尝试制作一个 log-in 页面,当用户数据库中没有注册时显示重定向按钮。当数据库中有一个或多个寄存器时,将所有用户显示到其中 select 个。问题是当数据库有寄存器时视图不会改变。

这里有 blade 模板代码:

@if(empty($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") }}'">Create user</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('users.index')->with('users', $users);
    }

这里有 web.php 路由:

Route::get('/', function () {
    return view('landing');
});

Route::get('/newUser', function () {
    return view('createUser');
});

Route::resource('users', UserController::class);

谁能帮帮我?我不知道如何解决这个...

empty($users)$users = User::all() 的结果不兼容。 ::all() returns a Collection,这是一个 Object:

Illuminate\Database\Eloquent\Collection {#3357
  all: [],
}

在此 Object 上使用 empty($users) 将 return false。您可以使用多种 Collection 方法,或 PHP 方法 count() 来确定:

@if($users->count() == 0)
# OR
@if(!$users->count())
# OR
@if(count($users) == 0)
# OR
@if(!count($users))
# OR 
@if($users->isEmpty())
# Etc etc...

为清楚起见,我建议使用 ->isEmpty(),但我提供了所有这些以展示不同的方法。

这里有 有用的方法:

https://laravel.com/docs/8.x/collections#available-methods

编辑:如果同一个视图被多次渲染,$users 需要可用,或者通过 isset():

检查
@if (!isset($users) || $users->isEmpty())
<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") }}'">Create user</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

已解决,问题出在blade的文件名的路由上。我把它放在登录文件夹中,并在 web.php

中更改了路由

无论如何,感谢大家浪费一点时间尝试 h