php - 在按钮单击 Laravel 时从视图中切换数据库值
问题描述
我使用 Laravel 框架作为后端 API 和一些用于前端的刀片式 PHP 文件,特别是用于 /admin 路由的身份验证和管理面板。在 /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() 参数的“操作”部分,这是一个错误类型,参数错误仍然存在。
有人可以解释如何做到这一点吗?
解决方案
您正在尝试将参数传递给您的路线,但其声明中有任何参数。您需要将其添加到您的路由路径中:
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);
/* ... */
}
推荐阅读
- c# - 使用 CSVHelper 如何反序列化带有子项列表的 CSV
- javascript - How to compare ids that are inside of plugin?
- android - 为 iOS 和 Android 提供不同的 Progressive Web App UI
- sql - Compare numerically in varchar column
- android - 从 google Play Store 获取应用用户信息
- docker - 将 ansible 应用程序安装到 docker 容器
- javascript - 在填充数组项上的映射函数似乎为空之后
- jquery - vue.js 中的 jquery 方法实现
- r - 计算 R 中特殊列的 RMSE
- c - 如何将整数值插入到 uint64_t 之类的rocksdb?