为什么我得到 [Laravel - Undefined variable: users (View..] 如果我尝试在同一个视图上使用 POST 和 GET?
Why I get [Laravel - Undefined variable: users (View..] if I tried to use POST and GET on the same view?
我正在尝试使用 laravel 制作一个简单的搜索表单。
搜索页面的结果应该是相同的。
但我无法让它工作,我不确定为什么
它在不同的路线上工作,但无法让它在同一条路线上工作。
路线:
Route::get('searchuser',function(){
return view('searchuser');
})->middleware('auth');
Route::post('searchuser', function(){
$q = Input::get('name');
$users = App\User::where('name_en','like',$q)->get();
return view('searchuser', ['users' => $users]);
});
Blade:
<div class="panel-body">
<form class="form-horizontal" role="form" method="POST" action="searchuser">
{{ csrf_field() }}
<div class="form-group{{ $errors->has('name') ? ' has-error' : '' }}">
<label for="name" class="col-md-4 control-label">Name</label>
<div class="col-md-6">
<input id="name" type="text" class="form-control" name="name" value="{{ old('name') }}" placeholder="Search.." required autofocus>
@if ($errors->has('name'))
<span class="help-block">
<strong>{{ $errors->first('name') }}</strong>
</span>
@endif
</div>
</div>
<div class="form-group">
<div class="col-md-6 col-md-offset-4">
<button type="submit" class="btn btn-primary">
Search
</button>
</div>
</div>
</form>
<div>
@foreach($users as $user)
{{$user->name_ar . '<br />'}}
@endforeach
</div>
</div>
您的变量名称不匹配。您将用户作为 $users2
行中的变量:
$users2 = App\User::where('name_en','like',$q)->get();
但随后您将变量 $users
发送到视图(不存在):
return view('searchuser', ['users' => $users]);
您已定义一个 $users2
并且 已通过 $users
到您的视图
编辑:
我想你的情况应该是这样的:
$users = App\User::where('name_en','like','%' . $q . '%')->get();
关注这个
Route::post('searchuser', function(){
$q = Input::get('name'); //problem in your code
$q = \Illuminate\Support\Facades\Input::get('name'); //update
$users2 = App\User::where('name_en','like',$q)->get();
return view('searchuser', ['users' => $users2]);
});
Use
return view('searchuser', ['users' => $users2]);
OR
$users = App\User::where('name_en','like',$q)->get();
我关注第一个
修好了。
一开始我发送了一个不同的变量名,因为每个人都注意到了。
但是我忘记在循环之前检查 $users 变量是否已设置。
所以当我尝试 运行 Get 路由时出现错误,因为 PHP 是正确的,我还没有发送变量 $users。
所以简单的修改是:
@if(count($users))
@foreach($users as $user)
{{ $user->name_ar . '<br />' }}
@endforeach
@endif
您正在使用相同的路线和相同的 blade 模板
在此 blade 模板中,您正试图访问一个变量。
在路由 POST
中定义,而在其他 GET
中未定义
所以你的问题是在你的 GET
路线上而不是在你的 POST
路线上;
要解决此问题,请将默认值传递给您的 GET
路由,如下所示:
Route::get('searchuser',function(){
return view('searchuser', ['users' => []]);
})->middleware('auth');
OR/AND 在您的 blade 模板中确认用户变量已设置
@if(isset($users))
@foreach($users as $user)
{{$user->name_ar . '<br />'}}
@endforeach
@endif
我正在尝试使用 laravel 制作一个简单的搜索表单。 搜索页面的结果应该是相同的。 但我无法让它工作,我不确定为什么 它在不同的路线上工作,但无法让它在同一条路线上工作。
路线:
Route::get('searchuser',function(){
return view('searchuser');
})->middleware('auth');
Route::post('searchuser', function(){
$q = Input::get('name');
$users = App\User::where('name_en','like',$q)->get();
return view('searchuser', ['users' => $users]);
});
Blade:
<div class="panel-body">
<form class="form-horizontal" role="form" method="POST" action="searchuser">
{{ csrf_field() }}
<div class="form-group{{ $errors->has('name') ? ' has-error' : '' }}">
<label for="name" class="col-md-4 control-label">Name</label>
<div class="col-md-6">
<input id="name" type="text" class="form-control" name="name" value="{{ old('name') }}" placeholder="Search.." required autofocus>
@if ($errors->has('name'))
<span class="help-block">
<strong>{{ $errors->first('name') }}</strong>
</span>
@endif
</div>
</div>
<div class="form-group">
<div class="col-md-6 col-md-offset-4">
<button type="submit" class="btn btn-primary">
Search
</button>
</div>
</div>
</form>
<div>
@foreach($users as $user)
{{$user->name_ar . '<br />'}}
@endforeach
</div>
</div>
您的变量名称不匹配。您将用户作为 $users2
行中的变量:
$users2 = App\User::where('name_en','like',$q)->get();
但随后您将变量 $users
发送到视图(不存在):
return view('searchuser', ['users' => $users]);
您已定义一个 $users2
并且 已通过 $users
到您的视图
编辑:
我想你的情况应该是这样的:
$users = App\User::where('name_en','like','%' . $q . '%')->get();
关注这个
Route::post('searchuser', function(){
$q = Input::get('name'); //problem in your code
$q = \Illuminate\Support\Facades\Input::get('name'); //update
$users2 = App\User::where('name_en','like',$q)->get();
return view('searchuser', ['users' => $users2]);
});
Use
return view('searchuser', ['users' => $users2]);
OR
$users = App\User::where('name_en','like',$q)->get();
我关注第一个
修好了。 一开始我发送了一个不同的变量名,因为每个人都注意到了。
但是我忘记在循环之前检查 $users 变量是否已设置。
所以当我尝试 运行 Get 路由时出现错误,因为 PHP 是正确的,我还没有发送变量 $users。
所以简单的修改是:
@if(count($users))
@foreach($users as $user)
{{ $user->name_ar . '<br />' }}
@endforeach
@endif
您正在使用相同的路线和相同的 blade 模板
在此 blade 模板中,您正试图访问一个变量。
在路由 POST
中定义,而在其他 GET
所以你的问题是在你的 GET
路线上而不是在你的 POST
路线上;
要解决此问题,请将默认值传递给您的 GET
路由,如下所示:
Route::get('searchuser',function(){
return view('searchuser', ['users' => []]);
})->middleware('auth');
OR/AND 在您的 blade 模板中确认用户变量已设置
@if(isset($users))
@foreach($users as $user)
{{$user->name_ar . '<br />'}}
@endforeach
@endif