从按钮上的视图切换数据库值,单击Laravel

时间:2019-05-27 07:09:41

标签: 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";
    }
}

我想通过单击按钮从视图中调用此方法。

我尝试通过指定动作来使用表单发送请求,但是它给出了一个错误,提示传递的值小于预期的参数数量。

{!! 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()参数的“操作”部分,这是一个错误的类型,参数错误仍然存​​在。

有人可以解释如何做到吗?

1 个答案:

答案 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);

    /* ... */
}