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 和其他 getpostresource 路由运行良好。

只考虑两个往返于根 (/) 的 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 中列出的主要内容,如果未能解决你的问题,请参考以下文章

未找到 Laravel 5.2 自定义包路径

Laravel 5.2 HTTP(高级)路由与创建控制器

提交表单时使用路由参数传递变量Laravel 5.2

Laravel 路由使用get post any match 与匹配一个路径路由

Laravel 5.2 路由仅适用于根目录

如何在 Laravel 5.2 中使用资源声明路由