How do I make a Catch-All Route in Laravel

后端 未结 4 1953
悲哀的现实
悲哀的现实 2020-12-05 13:01

I need a laravel routes.php entry that will catch all traffic to a specific domain.com/premium-section of the site so that I can prompt people to become members before acces

相关标签:
4条回答
  • 2020-12-05 13:41

    You could also catch 'all' by using a regex on the parameter.

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

    Also can catch the whole group if no routes are defined with an optional param.

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

    This last one would catch 'domain.com/premium-section' as well.

    0 讨论(0)
  • 2020-12-05 13:43
    1. In app/Http/routes.php I create a route that will catch all traffic within domain.com/premium-section/anywhere/they/try/to/go and attempt to find and execute a matching function within PremiumSectionController
    2. But there aren't any matching methods, just a catch-all.

      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;
            }
    
        }
    
    0 讨论(0)
  • 2020-12-05 13:48

    This does the trick:

    Route::any('/{any}', 'MyController@myMethod')->where('any', '.*');
    
    0 讨论(0)
  • 2020-12-05 14:00

    This works for me

    // The catch-all will match anything except the previous defined routes.
    Route::any('{catchall}', 'CatchAllController@handle')->where('catchall', '.*');
    
    0 讨论(0)
提交回复
热议问题