2016-04-22 2 views
1

Ich habe eine Laravel 5.2 App, die Ressourcenrouten verwendet. Ich habe ein wie folgt:Laravel Beitrag hinzufügen Route zu Ressource Route

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

ich einen neuen Beitrag Route, um es für eine Sortieranlage Formular auf meiner Index-Seite hinzufügen möchten.

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

Ich habe die Post-Route über meine Ressourcenroute in meine routes.php platziert.

Eine Validierungsanforderung mit dem Namen SubmissionRequest, die für Formulare innerhalb der Submission-Ressource gedacht ist, wird jedoch auf meiner neuen Post-Route ausgeführt. Hier ist meine SubmissionsController Methode.

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); 
} 

Also, wenn die Sortier Form von meiner Index-Seite einreichen, wird die SubmissionRequest Validierung läuft, obwohl ich die SortRequest Validierung speziell nenne. Was mache ich falsch?

+0

Sie den Namen der Route in Konflikt, die 'Strecke :: resource' bereits die Routennamen„submissions.index“auf die GET-Ressource zu dem Index der Reglereinstellung . Sie sollten in Ihrer benutzerdefinierten POST-Route einen anderen Namen eingeben. Wenn Sie Zweifel haben, welcher Name welcher Ressource zugewiesen ist, denken Sie daran, dass Sie immer 'php artisan route: list' eingeben können. –

+0

Ich habe den Namen der Route in "submissions.sort" geändert und stehe immer noch auf dem gleichen Problem. Ich verstehe, dass die Ressourcenroute eine get-Methode für index hinzufügt, aber ich muss eine zusätzliche post-Methode hinzufügen. Ich sehe in der Dokumentation "Route :: match()" aber würde dies die Ressourcenroute überschreiben? – AJStacy

Antwort

2

Ich löste es.

Da meine Post Route für submissions.index mit meiner Get Route wurde in Konflikt habe ich unter die Resource Route folgendes:

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

Dies ermöglicht die Route sowohl Get und Post Anfragen zu akzeptieren, durch die automatisch generierten zwingende ein.

Die Dokumentation ist hier: https://laravel.com/docs/master/routing#basic-routing

+1

Müsste dies nicht * unterhalb * der Ressourcenroute zum Überschreiben kommen, nicht darüber? – Samsquanch

+0

Ja, ich habe mich verwirrt und die Antwort bearbeitet. Ich habe es gerade zu seinem Original zurückgebracht. – AJStacy