2016-07-06 56 views
1

我試圖在Laravel 5.2中創建包含路由的包。我在Http/Controllers文件夾中有控制器(名稱空間爲vendor\package\Http\Controllers\MyController)。我想創建別名,但我不知道如何。我不想在routes.php像那樣調用這個控制器:Laravel包路徑中的包控制器別名

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

但是這樣的:

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

我試着在Application類API進行搜索,但我無法找到這些信息。

程序包提供程序中的此代碼不起作用。

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

我的服務提供商:

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

您試圖讓您的程序包控制器在您的應用程序routes.php文件中,而不是包路線文件中?這對我來說沒有多大意義。如果你想爲你的包控制器動作創建動態URL,我認爲你需要找到另一種方式來完成它,例如使用包配置文件。 –

+0

@GerardReches不,不,這是我的包路線文件。 – ventaquil

+0

好的,所以問題是你的路線找不到控制器沒有完整的命名空間?你可以顯示你的包RouteServiceProvider嗎? –

回答

1

嘗試更新您的PackageRouterServiceProvider.php這樣的:

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

當然,你需要在你的Laravel配置app.php文件中註冊這個提供爲了工作。

+0

謝謝,它工作:)但你錯過'$ this-> app-> router'。我編輯了你的答案。再次感謝。 – ventaquil

+1

很高興幫助:) –