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

时间:2016-04-19 06:50:29

标签: php mysql laravel 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>

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

6 个答案:

答案 0 :(得分:2)

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

$actions

答案 1 :(得分:1)

因为您没有在视图中传递$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);

答案 2 :(得分:1)

试试这个:

public function index()
{
    //

    $actions = Action::where('id','>=',1)->paginate(10);

    $roles = Role::all();
    return view('actions.index',array('actions'=> $actions, 'roles' => $roles));
}

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

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

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

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

答案 5 :(得分:1)

这看起来更清洁。 php compact

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