2016-03-23 5 views
1

Ich verwende Route:Controller für ein Laravel 5.2-Projekt.Wie zu ändern oder zu aktualisieren Laravel der implizite Controller, um gewünschte URL zu erhalten?

Ich fand mich in einer interessanten Situation.

Meine Route Datei Angenommen, diesen Code hat

Route::controller('test','TestController'); 

TestController hat Methoden folgende

class TestController extends Controller 
{ 
    public function getIndex(){ 
     dd('index'); 
    } 
    public function getDetails($id){ 
    return $id.'/details'; 
    } 
    public function getItem($var1,$var2){ 
    return $var1.$var2.'/item'; 
    } 


} 

so, wenn ich Route localhost:8000/test es den Inhalt von getIndex() Methode zeigt.

Jetzt möchte ich url für dieses Details Stück durchsuchen

localhost::8000/test/item1/details 
localhost::8000/test/item2/details 
localhost::8000/test/item3/details 
.... 
localhost::8000/test/itemN/details 

Ich weiß nicht, wie es zu tun, wenn meine Route-Controller wie dieses ist

Route::controller('test','TestController'); 

Da alle Artikel sind Variablen. Also mein gewünschtes Ergebnis zu erhalten änderte ich meine Route wie folgt aus:

Route::controller('test/{id}','TestController'); 

und jetzt kann ich diese URL zugreifen

localhost::8000/test/item3/details 

Aber Problem ist jetzt, ich nicht in der Lage bin localhost::8000/test

zuzugreifen ich auch wollte auch auf folgende URL zugreifen

localhost::8000/test/item3/shop1/details 
localhost::8000/test/item3/shop2/details 

Also wie kann ich dieses Problem mito lösen ut mit route::resource

Antwort

0

Ich fand eine Lösung, um diese Herausforderung zu überwinden.

In meiner Route-Datei hinzufügen i zwei neue Routen

Route::get('test/{var1}/{var2}/details','[email protected]'); 
Route::get('test/{id}/details','[email protected]'); 

Jetzt kann ich

localhost::8000/test 
localhost::8000/test/item3/details 
localhost::8000/test/item3/shop1/details 

diese URLs zugreifen Aber ein Problem gefunden.Welche ist, kann ich auch auf die Daten zugreifen folgende URLs mit

localhost::8000/test/details/item3 
localhost::8000/test/details/item3/shop1 

So dies zu verhindern ich meine Methode

ändern haben
public function getDetails($id){ 
    return $id.'/details'; 
    } 
    public function getItem($var1,$var2){ 
    return $var1.$var2.'/item'; 
    } 

zu

public function details($id){ 
    return $id.'/details'; 
    } 
    public function item($var1,$var2){ 
    return $var1.$var2.'/item'; 
    } 

und Routen modifiziert

Route::get('test/{var1}/{var2}/details','[email protected]'); 
Route::get('test/{id}/details','[email protected]'); 

zu

Route::get('test/{var1}/{var2}/details','[email protected]'); 
Route::get('test/{id}/details','[email protected]'); 

für besseren Weg suchen, um diese zu lösen :)

0

ich nicht so viel Wissen haben, aber ich denke, es ist etwas zu tun ..

Route::group(['prefix'=>'test'], function(){ 
    Route::get('/', function(){return "hi";}); 
    Route::get('/{id}', function($id){return "hi".$id;}); 
    Route::get('/{id}/{id2}', function($id, $id2){return "hi".$id.$id2;}); 
}); 
+0

Tnx für Ihre Mühe, aber ich habe viele Methoden in TestController und implizite Controller hängt Test vor jeder URL. Wenn ich also einen Methodennamen getInformation in TestController habe, wird dieser URL-Test/diese Information erzeugt, und ich möchte nicht alle diese Routen manuell schreiben. – shuvrow

+0

Also warum nicht so eine Route verwenden - localhost/test/detail/itemid/shopid? oder Sie bleiben bei Ihrer angegebenen URL? –

+0

Für SEO Zweck :) – shuvrow

0

Implizite Controller für die Unterstützung Routing wird von L5.2 fallen gelassen. Sie können stattdessen RESTFul-Controller verwenden, um die Routenerklärung zu verringern.

+0

Ich benutze Laravel Framework Version 5.2.24 und es funktioniert gut :) – shuvrow

+0

Es ist veraltet und sobald Version 5.3 landen wird es fallen gelassen werden. – Rafique

Verwandte Themen