Reputation: 3525
I need a Laravel routes.php
entry that will catch all traffic to a specific example.com/premium-section
of the site so that I can prompt people to become members before accessing the premium content.
Upvotes: 41
Views: 41810
Reputation: 265
Laravel now has a built-in method for this:
https://laravel.com/docs/routing#fallback-routes
Upvotes: 9
Reputation: 50481
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 example.com/premium-section
as well.
Upvotes: 55
Reputation: 1874
This works for me
// The catch-all will match anything except the previous defined routes.
Route::any('{catchall}', 'CatchAllController@handle')->where('catchall', '.*');
Upvotes: -1
Reputation: 471
This does the trick:
Route::any('/{any}', 'MyController@myMethod')->where('any', '.*');
Upvotes: 47
Reputation: 3525
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;
}
}
Upvotes: 1