php - 单击 Laravel 按钮上的“查看”切换数据库值

标签 php laravel

我使用 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/

相关文章:

php - Laravel 5.6 withCount 和 where 语句

php - Laravel 5 应用命名空间

PHP: Laravel 如何急切加载查找方法

php - Elasticsearch\RuntimeException:无法进行JSON编码:第33行的文件/Elasticsearch/Serializers/SmartSerializer.php中的5

php - 从三个表中检查电子邮件是否存在

PHP 数据库类加载行函数 (OOP)

php - 无法使用 PHP 发出 CURL post 请求

mysql - 具有两级关系的流明排序

Laravel + VueJs + Webpack + Karma = 痛苦的世界

php - 打印垂直排序的 4 列数组