2016-07-06 7 views
1

Ich versuche, Paket in Laravel 5.2 mit Routen zu erstellen. Ich habe Controller in Http/Controllers Ordner (mit Namespace vendor\package\Http\Controllers\MyController). Ich möchte einen Alias ​​erstellen, aber ich weiß nicht wie. Ich will nicht, diesen Controller in routes.php so nennen:Laravel Paket Controller Alias ​​in Routen

Route::get('myurl', vendor\package\Http\Controllers\MyController::class . '@action'); 

Aber wie folgt aus:

Route::get('myurl', '[email protected]'); 

Ich habe versucht, dies in Application Klasse API zu suchen, aber ich kann diese Informationen nicht finden.

Dieser Code im Paketanbieter funktioniert nicht.

$this->app 
    ->alias(vendor\package\Http\Controllers\MyController::class, 'MyController'); 

Mein Service-Provider:

class PackageRouterServiceProvider extends ServiceProvider 
{ 
    /** 
    * Bootstrap the application services. 
    * 
    * @return void 
    */ 
    public function boot() 
    { 
     // 
    } 

    /** 
    * Register the application services. 
    * 
    * @return void 
    */ 
    public function register() 
    { 
     include(__DIR__ . '/../Http/routes.php'); 

     $this->app->alias(MyController::class, 'MyController'); // <- I tried this 
    } 
} 
+0

Sie versuchen, Ihren Paket-Controller in Ihrer Anwendung routes.php Datei, nicht in einem Paket Routes-Datei zu bekommen? Das macht für mich keinen Sinn. Wenn Sie dynamische URLs für Ihre Paket-Controller-Aktionen erstellen möchten, müssen Sie nach einer anderen Möglichkeit suchen, z. B. mit einer Paketkonfigurationsdatei. –

+0

@GerardReches Nein nein nein, es ist meine Paketrouten-Datei. – ventaquil

+0

Ok, das Problem ist also, dass Ihre Routen den Controller ohne seinen vollständigen Namespace nicht finden können? Können Sie Ihr Paket RouteServiceProvider anzeigen? –

Antwort

1

Versuchen Sie, aktualisieren Sie Ihre PackageRouterServiceProvider.php wie folgt aus:

class PackageRouterServiceProvider extends ServiceProvider 
{ 
    // Set this namespace to your package controllers namespace. 
    protected $namespace = 'vendor\package\Http\Controllers'; 

    public function boot(Router $router) 
    { 
     // 
    } 

    public function register() 
    { 
     $this->mapRoutes($this->app->router); 
    } 

    protected function mapRoutes(Router $router) 
    { 
     $router->group(['namespace' => $this->namespace], function($router) { 
      require (__DIR__ . '/../Http/routes.php'); 
     }); 
    } 
} 

Natürlich, dann müssen Sie diesen Anbieter in Ihrer Konfigurations app.php Laravel Registerdatei in um zu arbeiten.

+0

Danke, es funktioniert :) Aber Sie verpassen '$ this-> app-> Router'. Ich habe deine Antwort bearbeitet. Danke noch einmal. – ventaquil

+1

Gut zu helfen :) –