Laravel 中不允许使用奇怪的 405 方法

Posted

技术标签:

【中文标题】Laravel 中不允许使用奇怪的 405 方法【英文标题】:Weird 405 Method Not Allowed in Laravel 【发布时间】:2017-12-19 19:18:07 【问题描述】:

我有一个用于创建用户的表单,其中包含电子邮件、姓名和密码输入。该表单还有 5 个输入 (addr1-5) 用于用户地址。

在没有填写地址字段的情况下提交表单可以正常工作,并创建用户。

但是,如果您填写地址字段,则会显示405 Method Not Allowed 响应而中断。

路线:

Route::group(['prefix' => '/users'], function () 
    Route::post('/create', [
        'uses' => 'UserController@create',
        'as' => 'api_create_user',
    ]);
);

表格:

<form action=" route('api_create_user') " method="POST">
    ...
    <input type="text" name="addr1">
    <input type="text" name="addr2">
    <input type="text" name="addr3">
    <input type="text" name="addr4">
    <input type="text" name="addr5">
    ...
</form>

控制器:

class UserController extends Controller 
    ...
    public function create (RegisterRequest $request) 
        ...
        $address = [
            'addr1' => $request->input('addr1') ?? '',
            'addr2' => $request->input('addr2') ?? '',
            'addr3' => $request->input('addr3') ?? '',
            'addr4' => $request->input('addr4') ?? '',
            'addr5' => $request->input('addr5') ?? '',
        ];

        $address = (object)array_filter($address);

    $user->address = $address;

        ...
    

注册请求:

class RegisterRequest extends FormRequest 
    ...
    public function rules () : array 
        return array(
        ...
        'addr1' => 'nullable|string',
        'addr2' => 'nullable|string',
        'addr3' => 'nullable|string',
        'addr4' => 'nullable|string',
        'addr5' => 'nullable|string',
        ...
    );
    
    ...

我真的不知道问题出在哪里。这显然不是我在导入正确的类等的语法。

有什么想法吗?

谢谢!

【问题讨论】:

你能发布php artisan route:list的输出吗? 使用浏览器的Network 选项卡,检查POST 的路由;也许它正在做一些意想不到的事情,或者在不应该的地方执行重定向。 仅供参考,您可以在使用input() 时将默认值指定为第二个参数,因此$request-&gt;input('add1') ?? '' 将是$request-&gt;input('add1', '')。此外,由于您只是要过滤结果,所以可以只做$address = (object)array_filter($request-&gt;only('addr1', 'addr2', 'addr3', 'addr4', 'addr5')); Here's the output of route:list。公平地说,这有点混乱,因为有 3 个子域,而且有点失控。谢谢 好的,今天早上再次测试,AFAIK 没有任何变化,它可以工作。我喜欢网络开发!谢谢大家 【参考方案1】:

也许你忘记了method_field('POST')

https://laravel.com/docs/5.4/routing#form-method-spoofing

【讨论】:

只有在您的请求不是GETPOST 时才真正需要它。 是的,不是这样。还是谢谢

以上是关于Laravel 中不允许使用奇怪的 405 方法的主要内容,如果未能解决你的问题,请参考以下文章

405 方法不允许,PATCH 不工作。 Laravel、Ajax、Jquery、引导模式

NetworkError:WCF 中不允许使用 405 方法

Jersey 中不允许的 405 方法正在返回 Tomcat 的 405 页面

Laravel 5.4 错误 405 方法不允许错误

405 - 机器人框架中不允许的方法

HTTP 状态 405 – Apache Tomcat 服务器中不允许的方法 [重复]