Создание меню загрузки файлов:
Создаем простое текстовое поле(logo например) для хранения пути файла и в наследнике от автоматически созданной формы в функцию configure дописываем:$this->widgetSchema['logo'] = new sfWidgetFormInputFileEditable(array( 'label' => 'Attachments', 'file_src' => '/uploads/'.$this->getObject()->getLogo(), 'is_image' => true, 'edit_mode' => !$this->isNew(), 'template' => ' %input% %delete% %delete_label% %file% ', )); $this->validatorSchema['logo'] = new sfValidatorFile(array( //если указан путь, то кроме проверки еще и сохраняет, //путь относительно uploads 'path' => sfConfig::get('sf_upload_dir').'/', 'required' => false, 'mime_types' => 'web_images' )); $this->validatorSchema['logo_delete'] = new sfValidatorPass();
создание дополнительной проверки по полю(не стандартной):
Добавлять туда же:$this->validatorSchema['name'] = new sfValidatorAnd( array( new sfValidatorCallback( array('callback'=> array($this->getObject(), 'check') ) ), $this->validatorSchema['name'] /*previous value*/ ) );В модели создаем дополнительную функцию check вида:
public function check($validator, $value) { if(haveError($value)) throw new sfValidatorError($validator, $message); } return $value; }
для проверки более чем одного поля одновременно:
(Приходят все поля после проверки по каждому полю отдельно):form: $this->mergePostValidator( new sfValidatorCallback( array('callback'=> array($this->getObject(), 'check') ) model: public function check($validator, $values) { if(haveError($values)) throw new sfValidatorError($validator, $message); } return $values; }
sfPropelPager
Особенность в sfPropelPager - при подсчете количества страниц он сбрасывает поля группировки - результат может быть больше чем реально существует.Формирование сложных запросов:
Нахождение имени в нескольких полях:
select * from people where (name like ('%abc%') ) OR (last_name like ('%abc%') );
Выглядит таким образом:
$name = $c->getNewCriterion(PeoplePeer::NAME, '%abc%', Criteria::LIKE); $last = $c->getNewCriterion(PeoplePeer::LAST_NAME, '%abc%', Criteria::LIKE); $last->addOr($name); $c->addOr($last);
Основная особенность нужно объединить сначала части запроса, а уже потом добавлять в основной запрос.
No comments:
Post a Comment