首页 > 解决方案 > PUT 表单导致 404 Not Found (Laravel)

问题描述

我有一个模型,用户一个 UserController 和一个登录表单,其中 PUT 指定为方法。我的路线也已定义并与表单路线相匹配。提交表单时出现错误 404 Not Found。

我试过命名路线无济于事。

用户模型

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    protected $table = "panel_users";
    protected $primaryKey = "id";
    public $incrementing = true;
    public $timestamps = false;

    protected $fillable = ['username', 'password'];
}

用户控制器

namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;

class UserController extends Controller
{
    public function index() {
        $user = new User;
        return view('login', ['user' => $user]);
    }

    public function attemptLogin(Request $request, User $user) {
        error_log($user);
        session(['username' => $user->username]);
        return redirect('/');
    }
}

形式

{{ Form::model($user, ['route' => ['login.attemptlogin', $user], 'method' => 'PUT']) }}
                    <div class="form-group">
                        {{ Form::label('username', 'Username: ') }}
                        {{ Form::text('username', null, ['class' => 'form-control']) }}
                    </div>

                    <div class="form-group">
                        {{ Form::label('password', 'Password: ') }}
                        {{ Form::text('password', null, ['class' => 'form-control']) }}
                    </div>

                    <button class="btn btn-success" type="submit">Login</button>
{{ Form::close() }}

路线定义

Route::put('/login/attemptlogins/{user}', 'UserController@attemptLogin')->name('login.attemptlogin');

应该设置将用户名添加到会话变量并将模型输出到控制台。这两种情况都不会发生。

标签: phplaravel

解决方案


试试这个,

{{ Form::model($user, ['route' => ['login.attemptlogin', $user->id], 'method' => 'PUT']) }}

在控制器中

public function attemptLogin(Request $request, $id) {
    // ...
}

希望这可以帮助 :)


推荐阅读