2016-07-06 3 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

Вы пытаетесь получить свой контроллер пакетов в своем приложении route.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

Рад помочь :) –

Смежные вопросы