为什么在Laravel 5.2中显示未定义变量错误


Why show Undefined variable error in Laravel 5.2?

首先看一下我的工作文件。

ActionController.php:

namespace App'Http'Controllers;
use Illuminate'Http'Request;
use App'Action;
use App'Role;
use App'Http'Requests;
class ActionController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return 'Illuminate'Http'Response
     */
    public function index()
    {
        //
        $actions = Action::where('id','>=',1)->paginate(10);
        $roles = Role::all();
        $data = ['roles' => $roles];
        return view('actions.index',['actions'=>$actions]);
    }

index.blade.php:

<table id="example2" class="table table-bordered table-hover" width="100%">
    <thead>
        <tr>
            <th>URI</th>
            <th>Action</th>
            @foreach($roles as $role)
               <th>{{$role->role}}</th>
            @endforeach
        </tr>
    </thead>
        <tbody>
    @foreach($actions as $action)
        <tr>
            <td>{{$action->uri}}</td>
            <td>{{$action->action}}</td>
            <td>{{$action->role}}</td>
        </tr>
    @endforeach
    </tbody>
</table>

当我试图在foreach中显示actions时,它工作正常,但当我想在foreach循环中显示roles时,它显示Undefined variable: roles错误。如何在操作索引中显示角色?

更改ActionController.php。您需要在视图中创建一个想要访问的数组,因此创建一个名为$data的数组并将其传递给视图。在视图中传递数组后,您将能够访问在控制器中传递的变量,就像传递rolesactions一样,这样您就可以从视图中通过其名称$roles$actions来访问它。

public function index(){
    $actions = Action::where('id','>=',1)->paginate(10);
    $roles = Role::all();
    $data = ['roles' => $roles, 'actions'=>$actions];
    return view('actions.index',$data); // 
}

因为您没有在视图中传递$roles变量,所以应该像一样传递它

return view('actions.index',['actions'=>$actions])->withRoles($roles);

或者你可以像actions 一样简单地通过它

return view('actions.index',['actions'=>$actions,'roles' => $roles]);

$data = ['actions'=>$actions,'roles' => $roles];
return view('actions.index',$data);

试试这个:

public function index()
{
    //
    $actions = Action::where('id','>=',1)->paginate(10);
    $roles = Role::all();
    return view('actions.index',array('actions'=> $actions, 'roles' => $roles));
}

您没有将数据变量传递到视图中,应该将其添加到要传递的数组中。

return view(
    'actions.index',
    [
        'actions' => $actions,
        'roles' => $roles
    ]
);

由于变量和集合的名称相同,因此最好使用compact():

return view('actions.index', compact('roles', 'actions'));

这将自动将名称转换为数组,并将所有数据传递到视图中。

这看起来更干净。php紧凑型

return view('actions.index', compact('roles', 'actions'));