【问题标题】:Laravel Add Post Route to Resource RouteLaravel 将 Post 路由添加到资源路由
【发布时间】:2016-08-16 08:10:03
【问题描述】:

我有一个使用资源路由的 Laravel 5.2 应用程序。我有一个如下:

Route::resource('submissions', 'SubmissionsController');

我想为我的索引页面上的排序表单添加一个新的 Post 路由。

Route::post('submissions', [
    'as' => 'submissions.index',
    'uses' => 'SubmissionsController@index'
]);

我已将 Post 路由放置在我的 routes.php 中的 Resource 路由之上。

但是,一个名为 SubmissionRequest 的验证请求用于提交资源中的表单,正在我的新 Post 路由上执行。这是我的SubmissionsController 方法。

public function index(SortRequest $req)
{
    $submission = new Submission;
    $submission = $submission->join('mcd_forms', 'mcd_forms.submission_id', '=', 'submissions.id')->where('user_id', Auth::user()->id);

    $data['sort_types'] = [
        'name' => 'Name',
        'form_type' => 'Type'
    ];

    $data['direction'] = ( !empty($req['asc']) ? 'asc' : 'desc' );
    $data['dataVal'] = ( !empty($req['sort_type']) ? $req['sort_type'] : 'submissions.id' );

    $submission->whereNull('submissions.deleted_at')->orderBy(
        $data['dataVal'],
        $data['direction']
    );

    $data['submissions'] = $submission->get();

    return view('submissions.index')->with($data);
}

因此,当从我的索引页面提交排序表单时,它正在运行 SubmissionRequest 验证,即使我专门调用了 SortRequest 验证。我做错了什么?

【问题讨论】:

  • 您与路由名称冲突,Route::resource 已经将路由名称“submissions.index”设置为 GET 资源到控制器的索引。您应该在自定义 POST 路由中设置不同的名称。如果您对分配给哪个资源的名称有任何疑问,请记住您可以随时使用php artisan route:list
  • 我将路线名称更改为“submissions.sort”,但仍然遇到同样的问题。我了解资源路由正在为 index 添加一个 get 方法,但我需要添加一个额外的 post 方法。我在文档“Route::match()”中看到,但会使用它覆盖资源路由吗?

标签: php laravel laravel-5.2


【解决方案1】:

我解决了。

由于我的Post 路由与submissions.indexGet 路由冲突,我在下面添加了Resource 路由以下内容:

Route::match(['get', 'post'], 'submissions', [
    'as' => 'submissions.index',
    'uses' => 'SubmissionsController@index'
]);

这允许路由通过覆盖自动生成的请求来接受GetPost 请求。

文档在这里:https://laravel.com/docs/master/routing#basic-routing

【讨论】:

  • 这是否需要低于覆盖的资源路径,而不是高于?
  • 是的,我把自己弄糊涂了,编辑了回复。我刚把它恢复原状。
【解决方案2】:
Route::match(['get', 'post'], 'submissions', [
    'as' => 'submissions.index',
    'uses' => 'SubmissionsController@index'
]);

在 laravel 5 中它与 @store 操作冲突

【讨论】:

    猜你喜欢
    • 2018-04-20
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    • 2012-02-09
    • 2014-07-25
    • 2014-02-18
    相关资源
    最近更新 更多