POST 路由未从根路径 Laravel 5.2 中列出
Posted
技术标签:
【中文标题】POST 路由未从根路径 Laravel 5.2 中列出【英文标题】:POST routes are not listing from root path Laravel 5.2 【发布时间】:2018-09-12 09:56:00 【问题描述】:使用 Laravel 5.2,刀片中有 两个表单,它们必须从根目录提交(POST)到两个操作(/
) 。
这里是 app/Http/routes.php
..
Route::auth();
// Mails
Route::get('/contact', ['uses' => 'PageController@getContact', 'as' => 'contact']);
Route::post('/contact', ['uses' => 'PageController@postContact', 'as' => 'pages.postContact']);
Route::post('/', ['uses' => 'PageController@postGuestRegistration', 'as' => 'pages.postGuestRegistration']);
Route::post('/', ['uses' => 'PageController@postOnlineEnquiry', 'as' => 'pages.postOnlineEnquiry']);
...
/contact
和其他get
、post
和resource
路由运行良好。
只考虑两个往返于根 (/
) 的 POST 路由,这里列出了路由,但仅针对列表中的最后一个。
即,pages.postOnlineEnquiry
仅限。
否则pages.postGuestRegistration
仅当我对列表进行排序并在pages.postOnlineEnquiry
之后取pages.postGuestRegistration
。
我有一个路由组:
Route::group(['prefix' => 'pages'], function ()
...
...
// only GET|HEAD routes come under /pages are listed here
...
...
);
有解决办法吗?
即使我从根路径对这些 POST 路由进行分组,我也看不到任何可能的方法。
现在我找不到将两个表单发布到相同路径和不同操作的方法。
错误显示:
路线 [pages.postGuestRegistration] 未定义。
或
路线 [pages.postOnlineEnquiry] 未定义。
【问题讨论】:
也分享您的表格? 你不能有两个路径和方法相同的路由,服务器没有办法知道使用哪一个。考虑改变路径或方法。 @C2486 我想你猜到了:表单操作是route('pages.postOnlineEnquiry')
和route('pages.postGuestRegistration')
,记住根本原因来自路由。 tnx)
@NigelRen 好的,这可能是不可能的。现在您清楚地看到了摆在您面前的问题。考虑更改路径或方法,您能否发布答案?我认为这在这种情况下不起作用。我应该考虑另一个控制器还是放弃整个需求?
也许 C2486 发布的答案可以解决问题。
【参考方案1】:
@NigelRen 是对的,你不能有多个具有相同 url 和相同方法的路由 get
,post
...
所以我的建议是,在控制器中使用隐藏输入来区分两者
<form action="route('guest_or_online')" method="post">
.....
.....
<input type="hidden" value="guest" name="type">
</form>
<form action="route('guest_or_online')" method="post">
.....
.....
<input type="hidden" value="online" name="type">
</form>
所以你的路线只有一条,也就是
Route::post('/', ['uses' => 'PageController@GuestOrOnline', 'as' => 'guest_or_online']);
在您的控制器中,您可以通过获取 type
的值来调用每个函数
public function GuestOrOnline(Request $request)
if($request->type == "guest")
return $this->postGuestRegistration($request);
else
return $this->postOnlineEnquiry($request);
【讨论】:
以上是关于POST 路由未从根路径 Laravel 5.2 中列出的主要内容,如果未能解决你的问题,请参考以下文章