Лучшее решение для немодельного запроса на CakePHP1.3 - PullRequest
0 голосов
/ 02 декабря 2010

есть некоторый параметр, который не передает модель.

Router::connect("/ctrl/action/:mode/:year"      ,
    array('controller' => 'ctrl', 'action' => 'action'),
    array('mode' => 'modea|modeb', 'year' => '[12][0-9]{3}'));

Как проверить и продезинфицировать?

Должен ли я создать фиктивную модель? или реализовать на компоненте?

1 Ответ

1 голос
/ 02 декабря 2010

Ваш текущий маршрут не будет совпадать с /ctrl/action/modea/5010, поэтому он будет проходить по другому маршруту, скорее всего, по стандартному маршруту, который отправит запрос на Ctrl_controller::action('modea', 5010). То есть у вас в основном тот же результат.

Лучшее, что можно сделать, это, вероятно, просто пропустить маршрут, так как он на самом деле никуда не направляет, куда бы он не пошел. Просто проверьте действие в вашем контроллере перед использованием значений:

function action($mode, $year) {
    if (!in_array($mode, array('modea', 'modeb')) || $year < 1900 || 3000 < $year) {
        $this->cakeError('error404');
    }
    ... business as usual ...
}

Или:

function action($mode, $year) {
    switch ($mode) {
        case 'modea' :
            ...
            break;
        case 'modeb' :
            ...
            break;
        default :
            $this->cakeError('error404');
    }
}

Или какая-то их комбинация. Если переменные $mode и $year не имеют ничего общего с вашей базой данных / моделью, вы не хотите создавать модель для нее. Модели выполняют валидацию, потому что это важный шаг перед помещением данных в базу данных, но это не значит, что они являются единственной частью приложения, которая может или должна выполнять валидацию.

...