我使用 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";
}
}
我想通过单击按钮从 View 中调用此方法。
我尝试使用表单通过指定操作来发送请求,但出现错误,指出传递的值少于预期的参数数量。
{!! 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')
尽管我不确定是否必须为此操作设置显式路由,或者是否可以直接从 View 调用 Controller 函数而不定义路由。
我已经迭代了用户模型以显示所有用户:
@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
编辑:添加了blade文件的foreach部分。另外我修改了Form::open()参数的'action'部分,这是一个错误的输入,参数错误仍然存在。
有人可以解释一下这是如何做到的吗?
最佳答案
您正在尝试将参数传递给您的路线,但其声明中存在任何参数。您需要将其添加到您的路由路径中:
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() !!}
在 Controller 的方法中:
use Request;
/* ... */
public function setAdmin(Request $request) {
$user = User::find($request->id);
/* ... */
}
关于php - 单击 Laravel 按钮上的“查看”切换数据库值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56321284/