首先看一下我的工作文件。
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
的数组并将其传递给视图。在视图中传递数组后,您将能够访问在控制器中传递的变量,就像传递roles
和actions
一样,这样您就可以从视图中通过其名称$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'));