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->input('add1') ?? ''
将是$request->input('add1', '')
。此外,由于您只是要过滤结果,所以可以只做$address = (object)array_filter($request->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
【讨论】:
只有在您的请求不是GET
或POST
时才真正需要它。
是的,不是这样。还是谢谢以上是关于Laravel 中不允许使用奇怪的 405 方法的主要内容,如果未能解决你的问题,请参考以下文章
405 方法不允许,PATCH 不工作。 Laravel、Ajax、Jquery、引导模式
NetworkError:WCF 中不允许使用 405 方法