я хочу обновить статус пользователя, просто передайте параметр «статус». это мой код, но я не знаю, почему я не могу обновить статус пользователя. как исправить эту проблему?
мой контроллер
public function activation()
{
// dd('test');
$action = Input::get('status');
if (Input::get('activate'))
{
$this->activateUser($action);
}
elseif (Input::get('inactivate'))
{
$this->deactivateUser($action);
}
return redirect(route('admins-users.index'))->with('message-post', 'Status was updated successfully');
}
public function activateUser($user)
{
//dd('active');
User::findOrNew($user)->update(['status' => "1"]);
}
public function deactivateUser($user)
{
// dd('nonactive');
User::findOrNew($user)->update(['status' => "0"]);
}
мой маршрут
Route::post('admins-users/status', 'Backend\StatusController@activation');
мой вид
{!! Form::open(array('url' => 'admins-users/status')) !!}
@if ($user->status)
{!! Form::submit('inactivate', ['name' => 'inactivate', 'class'=>'btn btn-xs btn-default']) !!}
@else
{!! Form::submit('Activate', ['name' => 'activate', 'class'=>'btn btn-xs btn-success']) !!}
@endif
{!! Form::close() !!}
Попробуйте с этим
{!! Form::open(['url' => 'admins-users/status', 'method' => 'get' !!}
<input type = "hidden" name = "user_id" value = "{{ $user->id }}">
@if ($user->status)
{!! Form::submit('inactivate', ['name' => 'inactivate', 'class'=>'btn btn-xs btn-default']) !!}
@else
{!! Form::submit('Activate', ['name' => 'activate', 'class'=>'btn btn-xs btn-success']) !!}
@endif
{!! Form::close() !!}
Ваш маршрут
Route::get('admins-users/status', 'Backend\StatusController@activation');
Ваш метод контроллера
public function activation(Request $request)
{
$user_id = $request->user_id
if ($request->acticate) {
$this->activateUser($user_id);
}
elseif ($request->inactiavte) {
$this->deactivateUser($user_id);
}
return redirect(route('admins-users.index'))->with('message-post', 'Status was updated successfully');
}
Надеюсь это поможет :)
проблема в том, как получить идентификатор пользователя и активировать его.
все еще не работает, потому что вы не передаете значение статуса и идентификатора пользователя при использовании методов activUser и deactiveUser.
до сих пор не работает. почему вы используете $request->activate. вы не передаете его в представлениях
В кнопке вы назвали активировать/деактивировать, поэтому, если какая-либо кнопка нажата, ее значение будет установлено, а затем в контроллере мы просто должны проверить, какое значение кнопки установлено/нажато.
Попробовав несколько способов. наконец, я нашел ответ на эту проблему, используя Ajax и опцию выбора. я добавляю хэш-идентификатор перед передачей в контроллер и снова декодирую в контроллере. Я думаю, что id должен беспокоиться об этом пропуске.
мой контроллер
public function control(Request $request){
$status = $request->status;
$iduser = $request->iduser;
$key = Hashids::connection('main')->decode($iduser)[0] ?? abort(404);
$update = User::where('id', $key)->update(['status'=> $status]);
if ($update)
{
return redirect(route('admins-users.index'))->with('message-post', 'Status user was updated successfully');
}
}
моя форма использование хэш-идентификатора для кодирования идентификатора пользователя
@php $parameter = Hashids::connection('main')->encode($user->id); @endphp
{!! Form::hidden(null,$parameter, ['id'=> 'iduser'.$parameter ])!!}
{!! Form::select(
'status',
array(1=>'Active',0=>'Not Active'),
$user->exists ? $user->status : null,
[
'id' => 'action'.$parameter,
'placeholder' => 'Choose a status'
]
)
!!}
сценарий
$(document).ready(function(){
@foreach($users as $user)
@php $parameter = Hashids::connection('main')->encode($user->id); @endphp
$("#action{{ $parameter }}").change(function(){
var status = $("#action{{ $parameter }}").val();
var iduser = $("#iduser{{ $parameter }}").val();
if (status= = ""){
alert("Please select an option");
}
else{
if (confirm('Do you want to change {{ $user->name }} status to {{ $user->status ? 'InActive' : 'Active' }}?')) {
$.ajax({
url: '{{ url("/action") }}',
data: 'status=' + status + '&iduser=' + iduser,
type: 'get',
success:function(response){
console.info(response);
}
});
document.location.reload();
}
}
});
@endforeach
});
но в вашем маршруте вы указали метод публикации. Если вы хотите изменить его на get, вам также нужно изменить метод маршрута, например Route::get('..', '...');