Мне нужно иметь доступ к ряду маршрутов, только если условие выполнено. Иначе у меня не должно быть доступа к этим маршрутам.
Я думал, что это должно быть сделано с фильтром, но я думаю, что мне чего-то не хватает в том, как они работают.
Итак, это мой фильтр:
Route::filter('my.filter', function()
{
//some code regarding said condition
if($mycondition==true){
//WHAT TO PUT HERE?
}else{
//Error message
}
}
И на моих маршрутах я буду иметь:
Route::group(array('before' => 'my.filter'), function()
{
Route::resource('cities', 'CitiesController');
//... many more controllers here
});
Но все примеры, которые я видел, имеют перенаправление внутри фильтра в части if. Я не хочу этого, я хочу только, если условие в фильтре истинно, вы видите этот URL.
Если вы хотите, чтобы ваш фильтр прекратил выполнение ваших маршрутов (и контроллеров и т. Д.), Вы должны:
В Laravel вы можете сделать это довольно легко:
Route::filter('my.filter', function()
{
//some code regarding said condition
if($mycondition==true){
// here you have to do nothing so you could also flip the if...
}else{
App::abort(403);
}
}
Little sidenote: Как упоминалось выше в комментарии, я бы перевернул if. Как это:
Route::filter('my.filter', function()
{
//some code regarding said condition
if($mycondition==false){
App::abort(403);
}
}
Вам не нужно ничего помещать туда, просто дайте функции вернуть void. Это скажет laravel, что пользователю разрешено видеть страницу. Вы всегда можете положить return
там, чтобы позволить пользователю увидеть страницу и пропустить все следующие условия.
Когда условие не выполняется, лучше перенаправить пользователя на страницу, где вы объясняете, почему пользователь не может видеть страницу.
Route::filter('my.filter', function()
{
//some code regarding said condition
if($mycondition==true){
return;
}else{
//Error message
}
}