HOME>WEBプログラム覚書>[Laravel6.x]ADRパターンの場合、ルーティングどうすればいいのか

[Laravel6.x]ADRパターンの場合、ルーティングどうすればいいのか

LaravelでADRパターンを適用した場合のActionのディレクトリはapp/Http/Actionsにするのがまぁスタンダードなディレクトリ構造っぽい。

その場合、Route::method()で指定したコントローラーのprefixがApp\Http\Controllersとなっているのを無しにして完全修飾名で指定する。

App\Providers\RouteServiceProvider

  1. class RouteServiceProvider extends ServiceProvider
  2. {
  3.     /**
  4.      * This namespace is applied to your controller routes.
  5.      *
  6.      * In addition, it is set as the URL generator's root namespace.
  7.      *
  8.      * @var string
  9.      */
  10.     //protected $namespace = 'App\Http\Controllers';
  11.     protected $namespace = '';
  12. }

routes/web.php

  1. Route::get('/', \App\Http\Actions\HomeAction::class);

この場合、Lalavel 備え付けのAuthを使っていると困る。 コントローラーがApp\Http\Controllers\AuthにあるのでAuth::routes()のルーティングが通らない。 なんとかする方法としては今の所下記3つしか思い浮かばない。もっとスマートな方法はありそうなんだけど。

  1. RouteServiceProvider::$namespaceをApp\Http\Actionsに変更。
  2. Auth::routes()を使わない。
  3. RouteServiceProvider::$namespaceを変更しない。

1. RouteServiceProvider::$namespaceをApp\Http\Actionsに変更。

App\Providers\RouteServiceProvider

  1. class RouteServiceProvider extends ServiceProvider
  2. {
  3.     /**
  4.      * This namespace is applied to your controller routes.
  5.      *
  6.      * In addition, it is set as the URL generator's root namespace.
  7.      *
  8.      * @var string
  9.      */
  10.     //protected $namespace = 'App\Http\Controllers';
  11.     protected $namespace = 'App\Http\Actions';
  12. }

この場合、App/Http/Controllers/AuthApp/Http/Actions/Auth に持ってくる。 App\Http\Actions\Auth 以下のクラスの名前空間は App\Http\Controllers\Auth になっているので App\Http\Actions\Auth に変更する。

そうするとAuth::routes()が使える。

routes/web.php

  1. Auth::routes();
  2. Route::get('/', HomeAction::class)->name('home');

2. Auth::routes()を使わない

RouteServiceProvider::$namespaceを空にしてルーティングは完全修飾名でおこなう。

App\Providers\RouteServiceProvider

  1. class RouteServiceProvider extends ServiceProvider
  2. {
  3.     /**
  4.      * This namespace is applied to your controller routes.
  5.      *
  6.      * In addition, it is set as the URL generator's root namespace.
  7.      *
  8.      * @var string
  9.      */
  10.     //protected $namespace = 'App\Http\Controllers';
  11.     protected $namespace = '';
  12. }

routes/web.php

  1. // Auth::routes() で実行されるルーティングを完全修飾名で書き直す(下記は一部)
  2. Route::get('login', '\App\Http\Controllers\Auth\LoginController@showLoginForm')->name('login');
  3. Route::post('login', '\App\Http\Controllers\Auth\LoginController@login');
  4. Route::post('logout', '\App\Http\Controllers\Auth\LoginController@logout')->name('logout');
  5. Route::get('register', '\App\Http\Controllers\Auth\RegisterController@showRegistrationForm')->name('register');
  6. Route::post('register', '\App\Http\Controllers\Auth\RegisterController@register');
  7.  
  8. Route::get('/', \App\Http\Actions\HomeAction::class)->name('home');

これはしんどい。

RouteServiceProvider::$namespaceを変更しない

Actionを app/Http/Controllers/ に設置してしまえばなにも変更はいらない。

routes/web.php

  1. Auth::routes();
  2. Route::get('/', HomeAction::class);

どうしたものか・・・情報収集中。

参照ページ

投稿日 2019年12月10日 01:32
カテゴリ PHP
タグ ADR | Laravel | フレームワーク | 設定
トラックバック URL http://www.kantenna.com/cgi-bin/mt504/mt-tb.cgi/1805

コメント

コメントする
Name
Email Address
URL