HOME>WEBプログラム覚書>[Laravel6.x]ADRパターンの場合、ルーティングどうすればいいのか
[Laravel6.x]ADRパターンの場合、ルーティングどうすればいいのか
LaravelでADRパターンを適用した場合のActionのディレクトリはapp/Http/Actionsにするのがまぁスタンダードなディレクトリ構造っぽい。
その場合、Route::method()で指定したコントローラーのprefixがApp\Http\Controllersとなっているのを無しにして完全修飾名で指定する。
App\Providers\RouteServiceProvider
class RouteServiceProvider extends ServiceProvider
{
/**
* This namespace is applied to your controller routes.
*
* In addition, it is set as the URL generator's root namespace.
*
* @var string
*/
//protected $namespace = 'App\Http\Controllers';
protected $namespace = '';
}
routes/web.php
Route::get('/', \App\Http\Actions\HomeAction::class);
この場合、Lalavel 備え付けのAuthを使っていると困る。
コントローラーがApp\Http\Controllers\AuthにあるのでAuth::routes()のルーティングが通らない。
なんとかする方法としては今の所下記3つしか思い浮かばない。もっとスマートな方法はありそうなんだけど。
- RouteServiceProvider::$namespaceをApp\Http\Actionsに変更。
- Auth::routes()を使わない。
- RouteServiceProvider::$namespaceを変更しない。
1. RouteServiceProvider::$namespaceをApp\Http\Actionsに変更。
App\Providers\RouteServiceProvider
class RouteServiceProvider extends ServiceProvider
{
/**
* This namespace is applied to your controller routes.
*
* In addition, it is set as the URL generator's root namespace.
*
* @var string
*/
//protected $namespace = 'App\Http\Controllers';
protected $namespace = 'App\Http\Actions';
}
この場合、App/Http/Controllers/Auth を App/Http/Actions/Auth に持ってくる。
App\Http\Actions\Auth 以下のクラスの名前空間は App\Http\Controllers\Auth になっているので App\Http\Actions\Auth に変更する。
そうするとAuth::routes()が使える。
routes/web.php
Auth::routes();
Route::get('/', HomeAction::class)->name('home');
2. Auth::routes()を使わない
RouteServiceProvider::$namespaceを空にしてルーティングは完全修飾名でおこなう。
App\Providers\RouteServiceProvider
class RouteServiceProvider extends ServiceProvider
{
/**
* This namespace is applied to your controller routes.
*
* In addition, it is set as the URL generator's root namespace.
*
* @var string
*/
//protected $namespace = 'App\Http\Controllers';
protected $namespace = '';
}
routes/web.php
// Auth::routes() で実行されるルーティングを完全修飾名で書き直す(下記は一部)
Route::get('login', '\App\Http\Controllers\Auth\LoginController@showLoginForm')->name('login');
Route::post('login', '\App\Http\Controllers\Auth\LoginController@login');
Route::post('logout', '\App\Http\Controllers\Auth\LoginController@logout')->name('logout');
Route::get('register', '\App\Http\Controllers\Auth\RegisterController@showRegistrationForm')->name('register');
Route::post('register', '\App\Http\Controllers\Auth\RegisterController@register');
Route::get('/', \App\Http\Actions\HomeAction::class)->name('home');
これはしんどい。
RouteServiceProvider::$namespaceを変更しない
Actionを app/Http/Controllers/ に設置してしまえばなにも変更はいらない。
routes/web.php
Auth::routes();
Route::get('/', HomeAction::class);
どうしたものか・・・情報収集中。
投稿日 |
2019年12月10日 01:32 |
カテゴリ |
PHP |
タグ |
ADR | Laravel | フレームワーク | 設定 |
トラックバック URL |
http://www.kantenna.com/cgi-bin/mt504/mt-tb.cgi/1805 |
コメント