Laravel 表单发布 - MethodNotAllowedHttpException
Posted
技术标签:
【中文标题】Laravel 表单发布 - MethodNotAllowedHttpException【英文标题】:Laravel form post - MethodNotAllowedHttpException 【发布时间】:2018-10-08 05:55:24 【问题描述】:我正在尝试将表单发布到数据库,但出现以下错误
Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException 随消息抛出
表单预先填充了数据并以发布路线为目标。通过研究,我发现问题出在发布到获取路线上,但我定位的路线是帖子。
表格
<form action="/account/tenancy/$user->id/" method="POST">
csrf_field()
<div class="row">
<div class="col-md-6">
<label for="property_address">Property Address</label>
</div> <!-- ./col6 -->
</div> <!-- ./ row-6 -->
<div class="row">
<div class="col-md-10">
<select class="form-control" id="property_address" name="property_address">
<!--Gets all counties from DB -->
@foreach ($properties as $property)
<option value=$property->id>$property->address . ', ' . $property->town . ', ' . $property->county</option>
@endforeach
</select>
</div> <!-- ./ col-6-->
</div> <!-- ./ row-5 -->
<div class="row mt-2">
<div class="col-md-6">
<label for="landlord-name">Landlord Name</label>
</div> <!-- ./col=6 -->
</div> <!-- ./ row-4-->
<div class="row">
<div class="col-md-6">
<select class="form-control" name="landlord-name">
<option value="Auth::user()->name">Auth::user()->name</option>
</select>
</div> <!-- ./ row 3-->
</div> <!-- ./col-3 -->
<div class="row mt-2">
<div class="col-md-6">
<label for="tenand-name">Tenant Name</label>
</div> <!-- ./col=6 -->
</div> <!-- ./ row-4-->
<div class="row">
<div class="col-md-6">
<select class="form-control" name="tenant-name">
<option value="$user->name">$user->name</option>
</select>
</div> <!-- ./ row 3-->
</div> <!-- ./col-3 -->
<button class="mt-2 btn btn-primary" type="submit">Create Tenancy</button>
</form> <!-- ./form -->
控制器方法
//Renders Form
public function create($id)
$user = User::where('id', $id)->first();
$properties = PropertyAdvert::where('user_id', Auth::id())->get();
return view('/pages/account/tenancy/create', compact('user', 'properties'));
//Stores data
public function store(Request $request)
$Tenancy = Tenancy::create([
'tenant_id' => $request->user_id,
'landlord_id' => Auth::id(),
'property_address' => $request->property_address
]);
return back();
租赁模式
class Tenancy extends Model
protected $fillable = ['tenant_id', 'landlord_id', 'property_address', 'accepted'];
public function user()
return $this->belongsTo('App\User');
路线
【问题讨论】:
这个错误通常意味着你的路由定义有问题。你能说明如何在web.php
中声明你的路线吗?
问题可能出在路由上。请粘贴您的路线定义并粘贴您从php artisan route:list
获得的输出。
添加为图片
在表单操作中将 id 替换为 id。希望能解决问题。
不,那是行不通的。嗯嗯
【参考方案1】:
您使用了错误的方法。根据您的路线,将表单中的方法更改为 GET。
【讨论】:
但是它正在向数据库发送数据,所以它应该是一个帖子 所以改变你的路线【参考方案2】:<form action="/account/tenancy/id" method="POST">
试试这个
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Tenancy extends Model
protected $table = 'tenancy';
--------------------
--------------------
删除 /id 后的斜杠并确保您已在模型中定义表名。
【讨论】:
不,没有这样做。 删除 id 后的正斜杠并尝试 /id。对于表名问题,我以共享模型文件为例。【参考方案3】:在表单操作中从您的网址末尾删除斜杠:
<form action="/account/tenancy/id" method="POST">
使用:/account/tenancy/id
代替 /account/tenancy/id/
然后尝试。
【讨论】:
解决了这个问题。现在我得到另一个错误。但至少它的进展>未找到基表或视图:1146 表'rentable.tenancies'不存在 你的表名是什么? 你的表名应该是“tenancies”。如果没有覆盖模型中的表名。例如受保护的 $table = '***********'; Tablis 名称是tenancy。我没有在任何地方定义租约 afaik 正如我上面提到的,在模型中覆盖了你的表名。例如受保护的 $table = 'tenancy';以上是关于Laravel 表单发布 - MethodNotAllowedHttpException的主要内容,如果未能解决你的问题,请参考以下文章