Как использовать регулярные выражения с ресурсами в Laravel 4

Если мы создадим простой маршрут с Laravel 4, мы можем использовать where для установки регулярного выражения для каждого параметра. передается в URI. Например:

Route::get('users/{id}',function($id){
    return $id;
})->where('id','\d+');

Для каждого запроса на получение второго параметра. должны быть цифры. Проблема возникает, когда мы создаем ресурсы, если мы используем ->where(), это выдает ошибку о том, что это не объект.

Я пытался разместить где в группе, как массив в качестве третьего параметра. в ресурсе, но не сработало. Как мы могли бы использовать мощь регулярных выражений с мощью ресурсов Laravel 4?


person Joss    schedule 02.06.2013    source источник
comment
Не думай, что сможешь. Вы должны выполнять проверки, чтобы убедиться, что предоставленное значение существует в базе данных, поэтому проверка того, что это только число или содержит только буквенно-цифровые символы, всегда не требуется.   -  person Jason Lewis    schedule 02.06.2013


Ответы (1)


Он Джосс,

Я сходил с ума от того же вопроса, поэтому я провел небольшое исследование. Все, к чему я мог прийти, это следующий вывод: вам не нужен этот метод. В каждом из ваших методов контроллера вы можете указать значения по умолчанию после каждого аргумента:

public function getPage(id = '0', name = 'John Doe'){

Рядом с этим вы можете выполнить проверку регулярного выражения и множество других проверок с помощью валидатора laravel, например:

        //put the passed arguments in an array 
            $data['id'] = $id;
            $data['name'] = $name;

    //set your validation rules
            $rules = array(
                    "id" => "integer"
                    "name" => "alpha"
        );
            // makes a new validator instance with the data to be checked with the given 
            // rules
    $validator = Validator::make($data, $rules);

            // use the boolean method passes() to check if the data passes the validator
    if($validator->passes()){
            return "stuff";
            } 

            // set a error response that shows the user what's going on or in case of            
            // debugging, a response that confirms your above averages awesomeness

            return "failure the give a response Sire"; 
}

Поскольку большая часть проверки уже находится в списке параметров laravel, вам может не понадобиться проверка регулярного выражения. Тем не менее, это вариант (regex:pattern).

Моя теория об отсутствии метода where() в контроллерах заключается в том, что этот метод предлагает вам возможность выполнить проверку в вашем файле маршрута. Поскольку у вас уже есть такая возможность в вашем контроллере, в ней просто нет необходимости.

person user3274600    schedule 12.03.2014