2017-04-25 4 views
0

ich in Route habe eine Ressource:Laravel geht immer in show()

Route::resource('/p/{p_id}/certificate', 'CertificateController'); 

aber in CertificateController nennt es jedes Mal show() auch wenn ich für URL-Suche wie

/p/#number/certificate/index 

I habe eine Klasse wie diese

class CertificateController extends Controller 
{ 
    public function index(Request $request, $p_id) 
    { 
    ... 
    } 
    public function show($p_id) 
    { 
    ... 
    } 

Was ist das Problem?

+0

, wenn Sie '/ p/# Nummer/url Zeugnis für lokalisieren, zeigen auch Ihre zu' show() '? – hassan

+0

zeigen Sie uns Ihre Routen auf 'php artisan route: list' –

Antwort

0

Wenn Sie eine Ressource in Laravel verwenden, wird die Route /p/{id} automatisch zur Methode show routen. So wurde es entworfen.

Wenn Sie möchten, zu indizieren gehen versuchen, diesen Weg vor Ihnen,

Route::get('/p/{id}/certificate', '[email protected]'); 
+1

Sie vergaßen die' @ Methode 'nach' CertificateController' –

+0

Danke @EliasSoares! –

0

Für umleiten Ihre URL Sie bestimmte Methode vor Ressourcen Route schreiben können Sie Seite wie zu fahren:

web.php

Route::get('/p/{number}/certificate/index','[email protected]'); 
0

Sie können den Dokumenten danken, dass sie den Abschnitt "verschachtelte Ressourcen" entfernt haben. Diese

ist, wie Sie mit verschachtelten Ressourcen umgehen:

Route::resource('p.certificate', 'YourController'); 
// index - p/{p}/certificate 
// show - p/{p}/certificate/{certificate} 
// edit - p/{p}/certificate/{certificate}/edit 
// etc ... 

Wenn Sie möchten, dass die Parameternamen ändern zu können, dass einfach über das dritte Argument zu Route::resource, die die options Array ist tun.

Laravel Docs - 5.1 - Controllers - Restful - Nested Resources

Laravel Docs - 5.4 - Controllers - Restful - Naming Resource Route Parameters