我正在使用Laravel框架作为后端API和一些前端刀片PHP文件,特别是用于/ admin路由中的身份验证和管理面板。 在/ admin中,我显示所有注册用户的列表及其旁边的按钮。 (只有在“管理”列中将其值设置为true的用户才能看到此页面)。我想通过单击用户名旁边的按钮来切换用户的管理员状态,以提升或降级他们。 为此,我尝试使用带有get方法的表单提交。 我在UserController中定义了这样的方法:
public function setAdmin($id) {
$user = User::find($id);
$user->admin = !$user->admin;
if($user->save()) {
echo "Changed";
}
else {
echo "Could not be changed";
}
}
我想通过单击按钮从视图中调用此方法。
我尝试通过指定动作来使用表单发送请求,但是它给出了一个错误,提示传递的值小于预期的参数数量。
{!! Form::open(['action' => ['UserController@setAdmin', $user->id], 'method' => 'POST']) !!}
{{ Form::submit('Submit', ['class' => 'btn btn-primary']) }}
{!! Form::close() !!}
我有一条明确设置的路由来调用此操作
Route::post('/admin/users/setAdmin', 'UserController@setAdmin')
尽管我不确定是否必须为此操作设置显式路由,或者是否有可能直接从视图中调用控制器函数而无需定义路由。
我已经遍历用户模型以显示所有用户:
@if(count($users) > 0)
@foreach($users as $user)
<div class="card">
{{ $user }}
</div>
{!! Form::open(['action' => ['UserController@setAdmin', $user->id], 'method' => 'POST']) !!}
{{ Form::submit('Submit', ['class' => 'btn btn-primary']) }}
{!! Form::close() !!}
@endforeach
@else
<h2>No users found!</h2>
@endif
编辑:添加了刀片文件的foreach部分。我还修改了Form :: open()参数的“操作”部分,这是一个错误的类型,参数错误仍然存在。
有人可以解释如何做到吗?
答案 0 :(得分:2)
您正在尝试将参数传递给您的路线,但其声明中包含任何参数。您需要将其添加到您的路线路径中:
Route::post('/admin/users/setAdmin/{id}', 'UserController@setAdmin')
如果您不想使用这样的URL,则应在包含ID的表单中添加隐藏的输入:
{!! Form::open(['action' => ['UserController@setAdmin'], 'method' => 'POST']) !!}
{{ Form::hidden('id', $user->id) }}
{{ Form::submit('Submit', ['class' => 'btn btn-primary']) }}
{!! Form::close() !!}
并在您控制器的方法中:
use Request;
/* ... */
public function setAdmin(Request $request) {
$user = User::find($request->id);
/* ... */
}