Привет, у меня есть функция контроллера, называемая деактивацией, если я нажму на кнопку, она должна выполнить эту функцию:
public function deactivate($id)
{
$user = User::find($id);
$user->verified = false;
$user->save();
return redirect('/adminmodul')->with('success', 'Nutzer wurde erfolgreich deaktiviert');
}
и на мой взгляд кнопка выглядит так:
<td><a href = "{{ route('adminmodul.deactivate',$user->id)}}" class = "btn btn-primary"><i class = "fas fa-eye"></i></a></td>
и это мой маршрут:
Route::patch('/adminmodul/{id}',[
'as' => 'adminmodul.deactivate',
'uses' => 'AdminController@deactivate'
]);
каждый раз, когда я нажимаю на кнопку, я получаю сообщение об успехе, но ничего не происходит, и я не знаю, почему
я могу показать вам мой полный контроллер:
<?php
namespace App\Http\Controllers;
use App\User;
use App\Angebot;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
class AdminController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$angebote = DB::table('angebots')->first();
$users = DB::table('users')->get();
return view('adminmodul.index', compact('users', 'angebote'))
->with('i', (request()->input('page', 1) - 1) * 5);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('adminmodul.create');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
$user = User::find($id);
return view('adminmodul.edit', compact('user'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$request->validate([
'name'=>'required',
]);
$user = User::find($id);
$user->name = $request->get('name');
$user->save();
return redirect('/adminmodul')->with('success', 'Benutzer wurde geändert');
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
$user = User::find($id);
$angebot = Angebot::where('firma', $id);
$angebot->delete();
$user->delete();
return redirect('/adminmodul')->with('success', 'Nutzer wurde erfolgreich gelöscht');
}
public function deactivate($id)
{
$user = User::find($id);
$user->verified = false;
$user->save();
return redirect('/adminmodul')->with('success', 'Nutzer wurde erfolgreich deaktiviert');
}
}
и мои маршруты:
Route::resource('/adminmodul', 'AdminController');
Route::get('/adminmodul/{id}', 'AdminController@deactivate')->name('adminmodul.deactivate');
я не знаю что я делаю не так?? потому что я делаю это так же все время
это мой пользователь таблицы:
тип логический
напечатайте $user после сохранения данных, что вы получите
Как я могу это сделать?
убедитесь, что ваш $user->id не равен нулю.
поместите dd($id) в свою функцию и покажите нам, что вы получаете






Попробуйте использовать:
public function deactivate($id)
{
$user = User::find($id);
$user->verified = false;
$user->save();
return redirect('/adminmodul')->with('success', 'Nutzer wurde erfolgreich deaktiviert');
}
Вам нужно сохранить после присвоения значения,
public function deactivate($id)
{
$user = User::find($id);
$user->verified = false;
$user->save(); // add this line
return redirect('/adminmodul')->with('success', 'Nutzer wurde erfolgreich deaktiviert');
}
Обновите свои маршруты, как показано ниже,
Route::get('/adminmodul/{id}', 'AdminController@deactivate')->name('adminmodul.deactivate');
Route::resource('/adminmodul', 'AdminController');
Вы проверили, что ваш маршрут действительно соответствует вашему методу?
да или? Route::patch('/adminmodul/{id}',[ 'as' => 'adminmodul.deactivate', 'uses' => 'AdminController@deactivate' ]);
Почему вы используете запрос на исправление вместо запроса на получение? Измените патч маршрута, чтобы получить и посмотреть, что произойдет.
все такой же :/
Если ваши маршруты соответствуют вашему методу, он должен работать. Убедитесь, что ваши маршруты попали в метод с помощью dd('hit') или что-то в этом роде.
Можете ли вы загрузить свои полные маршруты?
да: Route::resource('/adminmodul', 'AdminController'); Route::get('/adminmodul/{id}', 'AdminController@deactivate')->name('adminmodul.deactivate');
я изменил свой пост, может быть, это поможет вам
Проверьте, действительно ли идентификатор получен в контроллере. Выполните команду dd($id), чтобы проверить, получила ли функция контроллера идентификатор или нет.
public function deactivate($id)
{
dd($id)
//rest of your code
}
Вам нужно убедиться, что ваш id не равен нулю, используйте метод findOrFail():
public function deactivate($id)
{
$user = User::findOrFail($id);
$user->verified = false;
$user->save();
return redirect('/adminmodul')->with('success', 'Nutzer wurde erfolgreich deaktiviert');
}
Измените маршрут на put:
Route::put('/adminmodul/{id}', 'AdminController@deactivate')->name('adminmodul.deactivate');
Вы должны поместить этот маршрут до в маршрут resource:
Route::put('/adminmodul/{id}', 'AdminController@deactivate')->name('adminmodul.deactivate');
Route::resource('/adminmodul', 'AdminController');
Когда вы используете маршруты resource, laravel создает маршрут для этого URL /adminmodul/{id}. Это может противоречить созданному вами маршруту. Посмотрите здесь для получения дополнительной информации.
Таким образом, вы должны поместить созданный вами маршрут до того, как объявили маршрут resource, или вы можете изменить URL-адрес, чтобы избежать конфликта:
Route::put('/adminmodul/deactivate/{id}', 'AdminController@deactivate')->name('adminmodul.deactivate');
какой тип данных проверен?