@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
晚上好,我正在尝试制作一个 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