Функция контроллера Laravel показывает успех, но не работает - PullRequest
0 голосов
/ 02 апреля 2019

Здравствуйте, у меня есть функция контроллера, которая называется деактивировать, если я нажимаю на кнопку, она должна выполнить эту функцию:

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');

Я не знаю, что я делаю не так ??потому что я делаю это все время одинаково

это мой пользователь таблицы:

enter image description here

Ответы [ 4 ]

0 голосов
/ 04 апреля 2019

Вы должны убедиться, что ваш 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');
0 голосов
/ 02 апреля 2019

Вам нужно сохранить после присвоения значения,

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');
0 голосов
/ 04 апреля 2019

Проверьте, действительно ли идентификатор принимается в контроллере.Выполните команду dd ($ id), чтобы проверить, получила ли функция контроллера идентификатор или нет.

public function deactivate($id)
{
    dd($id)
    //rest of your code
}
0 голосов
/ 02 апреля 2019

Попробуйте использовать:

public function deactivate($id)
{
    $user = User::find($id);
    $user->verified = false;
    $user->save();
    return redirect('/adminmodul')->with('success', 'Nutzer wurde erfolgreich deaktiviert');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...