Laravel控制器功能显示成功,但不起作用

时间:2019-04-02 05:51:03

标签: laravel controller routes

您好,我有一个称为停用功能的控制器功能,如果我单击按钮,它应该具有以下功能:

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 :(得分:0)

尝试使用:

public function deactivate($id)
{
    $user = User::find($id);
    $user->verified = false;
    $user->save();
    return redirect('/adminmodul')->with('success', 'Nutzer wurde erfolgreich deaktiviert');
}

答案 1 :(得分:0)

您需要在分配值后保存

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

答案 2 :(得分:0)

检查ID是否在控制器中实际收到。进行dd($ id)检查控制器功能是否已接收到ID。

public function deactivate($id)
{
    dd($id)
    //rest of your code
}

答案 3 :(得分:0)

您需要确保您的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}创建一条路由。这可能与您创建的路线冲突。看看here了解更多信息。

因此,您应该在声明resource路由之前放置创建的路由,否则可以更改URL以避免冲突:

Route::put('/adminmodul/deactivate/{id}', 'AdminController@deactivate')->name('adminmodul.deactivate');