为什么我得到 [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