質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.10%

Authのルーティングをワイルドカードで指定したい

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 178

score 22

環境
Laravel 5.5.50
PHP 7.3.11
MacOS X catalina

やりたい事
Laravelで計画書管理システムを作成しております。
このシステムを複数の利用団体に対応させるため、DBとURLを利用団体ごとに分離させようとしています。

各利用団体ごとにアクセスさせるURLは違いますが、対応させるDBが変わるだけでAP部分は共同にしたいです。

例えば
http://www.hoge.com//manage-system/user-group-a/index.html
http://www.hoge.com//manage-system/user-group-b/index.html
http://www.hoge.com//manage-system/user-group-c/index.html

の、どのurlにアクセスされても
Route::get('/','IndexController@index');
に集約されるというイメージです。

その上で、URLパターンのuser-group-xによって.envファイルを切り替える処理にしたいと考えております。

そこで以下のようにweb.phpをRoute::groupで囲ったところ、ほとんどのページは思うようできたのですが、Auth関係のページがエラーになり画面を表示できなくなりました。

Route::group(['prefix' => '{group_id}'],function() {
  Route::get('/','IndexController@index');

  Route::get('login', 'Auth\LoginController@showLoginForm')->name('login');
  Route::post('login', 'Auth\LoginController@login');
  Route::post('logout', 'Auth\LoginController@logout')->name('logout');

  Route::get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
  Route::post('register', 'Auth\RegisterController@register');

  Route::get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
  Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
  Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
  Route::post('password/reset', 'Auth\ResetPasswordController@reset')->name('password.update');

});

エラー画面↓
イメージ説明

一見すると、ログイン画面にURLパラメータは必要なさそうなのですが、Route::group内で使用したワイルドカードがパラメータとして邪魔をしているのかもしれません。

該当のauth/login.blade.phpですが、
@extends('layouts.app')
の1行を残して他を全部消してもエラーになります。
逆にそれだけ消して他を残してもエラーになります。
ただし、このページの中身を全て消して、ベタ書きで
TESTなどと書くとそれは表示できるのでbladeまでのリンクは通っているようです。

どなたかご教授願えませんか?

追記
検証中でパワープレイですが、以下のようにすると一応、振り分けはできそうです。
ワイルドカード使う代わりに、必要なURLパターンを全部ハードコーディングしています。
ただ、いかにも運用でカバーという酷いコードなのでまともな解決法を引き続き募集させていただきます。

Route::group(['prefix' => 'aaa'],function(){
    Auth::routes();
});
Route::group(['prefix' => 'bbb'],function(){
    Auth::routes();
});

Route::get('/facility/edit','FacilityManage\FacilityController@edit')->middleware('auth')
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.10%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る