Свое правило проверки

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
bemulima
Сообщения: 207
Зарегистрирован: 2012.12.20, 09:41
Откуда: Курган

Свое правило проверки

Сообщение bemulima »

Здравтвуйте, сделал свое правило проверки, но не работает:

Код: Выделить всё

public function ValidatorRelated()
    {

        $result = PostOptionRelated::model()->find(array(
            'condition' => 'page_id = :page_id AND category_id='. $_POST['category_id'],
            'params'    => array(':page_id' => $_POST['page_id']),
        ));
        if($result->option_id == $_POST['option_id'])
        $this->addError('page_id','Такая связь с категорией уже сушествует!');
        
    }
в рулес написал:

Код: Выделить всё

array('page_id, category_id, option_id', 'ValidatorRelated'),
Что не так, подскажите? :cry:
notgosu
Сообщения: 124
Зарегистрирован: 2012.05.22, 17:46

Re: Свое правило проверки

Сообщение notgosu »

замените $_POST['column'] на $this->column
Аватара пользователя
bemulima
Сообщения: 207
Зарегистрирован: 2012.12.20, 09:41
Откуда: Курган

Re: Свое правило проверки

Сообщение bemulima »

Странно, сработала, я думал с $_POST будет работать
masson
Сообщения: 545
Зарегистрирован: 2012.07.03, 15:59

Re: Свое правило проверки

Сообщение masson »

1. Ваш валидатор вызовется 3 раза (для 3-х полей). Зачем вам это надо? Сделайте руль для одного поля.
2. Вы почему-то page_id привязываете через params, а category_id втыкаете в condition напрямик. Наверное есть смысл сделать одинаково :)
Аватара пользователя
Neuromance
Сообщения: 716
Зарегистрирован: 2011.09.06, 13:04

Re: Свое правило проверки

Сообщение Neuromance »

я бы еще добавил, что надо стараться избегать в моделях различных $_POST, $_GET и т.д. Пусть этим всем рулят контроллеры, а модели работают со своими полями.
И я что-то не очень понял, валидатор типа для определения уникальности чтоли? Зачем тогда изобретать велосипед?
Аватара пользователя
bemulima
Сообщения: 207
Зарегистрирован: 2012.12.20, 09:41
Откуда: Курган

Re: Свое правило проверки

Сообщение bemulima »

Neuromance писал(а):И я что-то не очень понял, валидатор типа для определения уникальности чтоли? Зачем тогда изобретать велосипед?
Тут я кусок кода вложил, на самом деле код правило так выглядит:

Код: Выделить всё

public function ValidatorRelated()
    {

        if(!empty($this->page_id) && !empty($this->category_id)){
        $result = self::model()->find(array(
            'condition' => 'page_id = :page_id AND category_id='. $this->category_id,
            'params'    => array(':page_id' => $this->page_id),
        ));
        if($result->option_id == $this->option_id)
        $this->addError('page_id','Такая связь с категорией уже сушествует!');
        }elseif(!empty($this->page_id) && empty($this->category_id)){
        $result = self::model()->find(array(
            'condition' => 'page_id = :page_id',
            'params'    => array(':page_id' => $this->page_id),
        ));
        if($result->option_id == $this->option_id)
        $this->addError('page_id','Такая связь со страницей уже сушествует!');
        }
        
    } 
во общем я тут проверяю в таблице нет ли одинаковые связи, у меня есть много различные опции, их можно связать к страницам или к категориям, и вот я тут проверяю не связан ли данные уже раньше или нет: . а таблица в таком порядке | id | page_id | category_id | option_id |,
Аватара пользователя
bemulima
Сообщения: 207
Зарегистрирован: 2012.12.20, 09:41
Откуда: Курган

Re: Свое правило проверки

Сообщение bemulima »

masson писал(а):1. Ваш валидатор вызовется 3 раза (для 3-х полей). Зачем вам это надо? Сделайте руль для одного поля.
Да потому что мне всех надо проверять)

Код: Выделить всё

2. Вы почему-то page_id привязываете через params, а  category_id втыкаете в condition напрямик. Наверное есть смысл сделать одинаково :) 
а я думал дополнительные можно писать напрямую т.е. не через params
masson
Сообщения: 545
Зарегистрирован: 2012.07.03, 15:59

Re: Свое правило проверки

Сообщение masson »

Прощще надо быть :)

Код: Выделить всё

if(!empty($this->page_id)) {
    $condition= 'page_id = :page_id AND option_id = :option_id';
    $params = array(':page_id' => $this->page_id, ':option_id' => $this->option_id),

    if(!empty($this->category_id)) {
        $condition .= ' AND category_id= :category_id';
        $params[':category_id'] = $this->category_id;
    }

    if(self::model()->exists($condition,$params)
        $this->addError('page_id', empty($this->category_id) ? 'Связь со страницей уже существует' : 'Связь с категорией уже существует!');
} 
Да потому что мне всех надо проверять)
Так они за один заход все проверяются
array('page_id', 'ValidatorRelated'),
а я думал дополнительные можно писать напрямую т.е. не через params
Все можно писать напрямую, если уверен в безопасности содержимого.
Последний раз редактировалось masson 2013.11.29, 14:10, всего редактировалось 1 раз.
Аватара пользователя
bemulima
Сообщения: 207
Зарегистрирован: 2012.12.20, 09:41
Откуда: Курган

Re: Свое правило проверки

Сообщение bemulima »

masson писал(а):Прощще надо быть :)
Круто! Зато мой ошибку дает если со страницей связь существует :D
masson
Сообщения: 545
Зарегистрирован: 2012.07.03, 15:59

Re: Свое правило проверки

Сообщение masson »

про текст ошибки? Уже поправил :)
Аватара пользователя
bemulima
Сообщения: 207
Зарегистрирован: 2012.12.20, 09:41
Откуда: Курган

Re: Свое правило проверки

Сообщение bemulima »

masson писал(а):Прощще надо быть :)
Но я ваш код возьму :mrgreen: Мне нравится потому что он, как нить я туда прикручу ошибку связь со страницей
masson
Сообщения: 545
Зарегистрирован: 2012.07.03, 15:59

Re: Свое правило проверки

Сообщение masson »

Исправил уже код, все там есть
Аватара пользователя
bemulima
Сообщения: 207
Зарегистрирован: 2012.12.20, 09:41
Откуда: Курган

Re: Свое правило проверки

Сообщение bemulima »

masson писал(а):про текст ошибки? Уже поправил :)
Круто!!! Теперь я так всегда буду делать)
Аватара пользователя
bemulima
Сообщения: 207
Зарегистрирован: 2012.12.20, 09:41
Откуда: Курган

Re: Свое правило проверки

Сообщение bemulima »

masson писал(а):Исправил уже код, все там есть
Спасибо!
Ответить