Переключить значение базы данных из View на нажатие кнопки Laravel - PullRequest
2 голосов
/ 27 мая 2019

Я использую Laravel Framework в качестве бэкэнд-API и несколько блейд-файлов PHP для внешнего интерфейса, особенно для аутентификации и панели администратора из маршрута / admin.В / admin я отображаю список всех зарегистрированных пользователей и кнопки рядом с ними.(Эта страница видна только пользователям, чье значение в столбце «Администратор» установлено в значение «истина»).Я хочу переключать статус администратора пользователя, продвигая или понижая его, нажав кнопку рядом с именем пользователя.Для этого я попытался использовать форму отправки с методом 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 файла blade-файла.Также я изменил часть 'action' параметров Form :: open (), это был опечатка, ошибка параметров все еще там.

Может кто-нибудь объяснить, как это можно сделать?

1 Ответ

2 голосов
/ 27 мая 2019

Вы пытаетесь передать параметр в свой маршрут, но он есть в его объявлении.Вам нужно добавить его в свой маршрут:

Route::post('/admin/users/setAdmin/{id}', 'UserController@setAdmin')

Если вы не хотите, чтобы URL-адрес был таким, вы должны добавить скрытый ввод в форму, содержащую ваш идентификатор:

{!! 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);

    /* ... */
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...