【问题标题】:Invalid argument supplied for foreach() in View. Laravel在视图中为 foreach() 提供的参数无效。拉拉维尔
【发布时间】:2020-07-10 23:09:16
【问题描述】:

我想搜索表用户,但在http://127.0.0.1:8000/ 上看到错误:

为 foreach() 提供的参数无效(查看: /opt/lampp/htdocs/abonamenty/resources/views/users/index.blade.php)

点击搜索按钮后出现本地主机错误404。

“找不到对象!在此服务器上找不到请求的 URL。 引用页面上的链接似乎不正确或已过时。告诉 这个页面的作者关于这个问题。如果你认为这是一个 服务器错误,请联系您的管理员。”

这是我的控制器的一部分

public function index(Request $request)
{
    $data = User::sortable()->paginate(5);
    return view('users.index', compact('data'))->with('i', ($request->input('page', 1) - 1) * 5);
}

public function search(Request $request)
{
    $search = $request->get('search');
    $data = DB::table('users')->where('surname', "%$search%")->paginate(5);
    return view('users.index', ['users' => $data]);
}

我的路线:

Route::get('/home', 'HomeController@index')->name('home');

Route::group(['middleware' => ['auth']], function () {
    Route::resource('roles', 'RoleController');
    Route::resource('users', 'UserController');
    Route::resource('permissions', 'PermissionController');
    Route::resource('products', 'ProductController');
    Route::get('/search', 'UserController@search');
    Route::get('data', 'UserController@index');
    Route::get('posts', 'PostController@index');
});

我的看法:

@extends('layouts.app')

@section('content')
    <div class="row">
        <div class="col-lg-12 margin-tb">
            <div class="pull-left">
                <h2>Zarządzanie kontami użytkowników</h2>
            </div>
            <div class="col-md-4">
                <form action="/search" method="get">
                    <div class="input-group">
                        <input type="search" name="search" class="form-control">
                        <span class="input-group-prepend">
                            <button type="submit" class="btn btn-primary">Wyszukaj</button>
                        </span>
                    </div>
                </form>
            </div>
            <div class="pull-right">
                <a class="btn btn-success" href="{{ route('users.create') }}"> Utwórz nowego użytkownika</a>
            </div>
        </div>
    </div>
    <br>

    @if ($message = Session::get('success'))
        <div class="alert alert-success">
            <p>{{ $message }}</p>
        </div>
    @endif


    <table class="table table-bordered">
        <tr>
            <th scope="col">@sortablelink('id', 'Numer')</th>
            <th scope="col">@sortablelink('name', 'Imię')</th>
            <th scope="col">@sortablelink('surname', 'Nazwisko')</th>
            <th scope="col">@sortablelink('showname', 'Nazwa wyświetlania')</th>
            <th scope="col">@sortablelink('email', 'Email')</th>
            <th>Rola</a></th>
            <th width="280px">Akcja</a></th>
        </tr>
        @foreach ($data ?? '' as $key => $user)
            <tr>
                <td>{{ ++$i ?? '' ?? '' }}</td>
                <td>{{ $user->name }}</td>
                <td>{{ $user->surname }}</td>
                <td>{{ $user->showname }}</td>
                <td>{{ $user->email }}</td>
                <td>
                    @if(!empty($user->getRoleNames()))
                        @foreach($user->getRoleNames() as $v)
                            <label class="badge badge-success">{{ $v }}</label>
                        @endforeach
                    @endif
                </td>
                <td>
                    <a class="btn btn-info" href="{{ route('users.show',$user->id) }}">Wiecej informacji</a>
                    <a class="btn btn-primary" href="{{ route('users.edit',$user->id) }}">Edytuj użytkownika</a>
                    {!! Form::open(['method' => 'DELETE','route' => ['users.destroy', $user->id],'style'=>'display:inline']) !!}
                    {!! Form::submit('Usuń', ['class' => 'btn btn-danger']) !!}
                    {!! Form::close() !!}
                </td>
            </tr>
        @endforeach
    </table>
    {!! $data ?? ''->appends(request()->except('page'))->render() !!}

    <!--{!! $data ?? ''->render() !!}-->

    <p class="text-center text-primary"><small>ARTplus 2020</small></p>
@endsection

【问题讨论】:

  • 在您看来,您需要检查并查看您的 $data 变量是什么。您可以使用dd 命令(laravel.com/docs/7.x/helpers#method-dd)进行检查。它应该根据文档laravel.com/docs/7.x/… 返回一个 LengthAwarePaginator。如果它不是一个它是空的,你会遇到你正在做的问题$data ?? ''

标签: php laravel


【解决方案1】:

我认为您需要更改搜索方式

use Illuminate\Support\Facades\Input;

public function search()
{
    $search =Input::get('search');
    $data = DB::table('users')->where('surname', "%$search%")->paginate(5);
    // Also we can check using print_r($data); die(); 
    return view('users.index', ['users' => $data]);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 2011-05-17
    • 2011-02-07
    相关资源
    最近更新 更多