首先来看看我的工作文件。
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
错误。如何在动作索引中显示角色?
答案 0 :(得分:2)
更改ActionController.php
。您需要在视图中创建要访问的数组,因此创建一个名为$data
的数组并将其传递给视图。在视图中传递数组后,您将能够访问您在控制器中传递的变量,就像您已通过roles
和actions
一样,这样您就可以通过它的名称{{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'));