Установка правил проверки во время выполнения в CakePHP - PullRequest
0 голосов
/ 02 декабря 2010

Моя проблема сейчас заключается в том, что Модель имеет набор правил проверки, например:

var $validate = array(
    'title' => array(
        'rule' => 'notEmpty'
    ),
    'uri' => array(
        'slugged' => array(
            'rule' => '/^[a-z0-9-_]+$/i',
            'message' => 'This field should only contain characters, numbers, dashes and underscores'
        ),
        'uniqueUrl' => array(
            'rule' => array('uniqueUrl'),
            'message' => 'A page has already acquired this url'
        )
    ),
    'meta_keywords' => array(
        'rule' => 'notEmpty'
    ),
    'meta_description' => array(
        'rule' => 'notEmpty'
    ),
    'layout' => array(
        'rule' => 'notEmpty'
    )
);

Проблема в том, что в другой модели, имеющей отношение «один», контроллер также вставляет в нее данные. Я не хочу требовать заголовок, URI и макет с этой страницы. Как мне это сделать?

У меня есть модель поста, и я устанавливаю значения страницы оттуда.

Array
(
    [Post] => Array
        (
            [title] => data[Post][title]
            [body] => 

Post Body

        )

    [Category] => Array
        (
            [Category] => Array
                (
                    [0] => 1
                    [1] => 2
                    [2] => 3
                    [3] => 4
                )

        )

    [Page] => Array
        (
            [meta_keywords] => data[Page][meta_keywords]
            [meta_description] => data[Page][meta_description]
        )

)

Я делаю это с контроллера, чтобы установить информацию для модели страницы

$this->data['Page']['title'] = $this->data['Post']['title'];

Получается так:

Array
(
    [Post] => Array
        (
            [title] => data[Post][title]
            [body] => 

Post Body

        )

    [Category] => Array
        (
            [Category] => Array
                (
                    [0] => 1
                    [1] => 2
                    [2] => 3
                    [3] => 4
                )

        )

    [Page] => Array
        (
            [meta_keywords] => data[Page][meta_keywords]
            [meta_description] => data[Page][meta_description]
            [title] => data[Post][title]
        )

)

Моя проблема в том, что мне не требуется поле Page при сохранении. Post belongsTo Page.

Мне не требуется [Page][layout], когда при сохранении публикации как публикации используется представление метода по умолчанию в контроллере почты. Страница использует статические страницы и требует их при создании страницы, а не при создании публикации.

1 Ответ

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

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

Где это сделать или как сделать это более аккуратно?Ну, beforeValidate может быть «правильным» местом для этого, но я бы сделал это там, где это лучше всего соответствует логике вашего приложения.Функция должна предшествовать элегантности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...