web-dev-qa-db-ja.com

Laravel 5.Xでキャッチオールルートを作成する方法

プレミアムコンテンツにアクセスする前にメンバーになるように促すために、サイトの特定のdomain.com/premium-sectionへのすべてのトラフィックをキャッチするlaravel 5 routes.phpエントリが必要です。

私は自分の質問に答えます〜そして、うまくいけば人々はこの情報を使うことができます。

24
Tarek Adam
  1. App/Http/routes.phpで、domain.com/premium-section/anywhere/they/try/to/go内のすべてのトラフィックをキャッチするルートを作成し、PremiumSectionController内で一致する機能を見つけて実行しようとします
  2. ただし、一致するメソッドはなく、すべてをキャッチします。

    Route::group(['as' => 'premium-section::',
                  'prefix' => 'premium-section',
                  'middleware' => ['web']],
                  function(){
                     Route::any('', 'PremiumSectionController@premiumContentIndex');
                     Route::controller('/', 'PremiumSectionController');
    
                  });
    

    namespace App\Http\Controllers;

    use ...

    class PremiumSectionController extends Controller{

        public function premiumContentIndex(){
           return 'no extra parameters';
        }

        //magically gets called by laravel
        public function missingMethod($parameters = array()){
            return $parameters;
        }

    }
1
Tarek Adam

パラメータで正規表現を使用して「すべて」をキャッチすることもできます。

Route::group(['prefix' => 'premium-section'], function () {
    // other routes
    ...
    Route::get('{any}', function ($any) {
        ...
    })->where('any', '.*');
});

また、オプションのparamでルートが定義されていない場合、グループ全体をキャッチできます。

Route::get('{any?}', function ($any = null) {
    ...
})->where('any', '.*');

この最後のものも「domain.com/premium-section」をキャッチします。

40
lagbox

これはトリックを行います:

Route::any('/{any}', 'MyController@myMethod')->where('any', '.*');
18
user3260365