1 Отредактировано goter (2009-03-18 14:37:43)

Тема: Методы propel:generate-admin

Есть модуль згенереный токой штукой propel:generate-admin. У него есть своы методы по типу update, create, delete, тоесть методы без темплейтов с редиректом.
Вопрос!!!
Как мне изменить ети методы? А именно как при сохранении в базу некого елемента задать свой метод create?
А и еще один момент - вся работа просходит с использованием routColection

2

Re: Методы propel:generate-admin

Как мне изменить ети методы?

не надо изменять

переопределите в модели их

3

Re: Методы propel:generate-admin

как переопредилить?

4

Re: Методы propel:generate-admin

action.class.php

   public function executeCreate(sfWebRequest $request)
  {
    //что то делаем чего нет в cache/backend/dev/modules/....
    //если надо, после тюнинга можно вызвать родительский метод
   
    parent::executeIndex($request);
  }

5

Re: Методы propel:generate-admin

228Vit, ну или так, да

6

Re: Методы propel:generate-admin

228Vit пишет:

action.class.php

   public function executeCreate(sfWebRequest $request)
  {
    //что то делаем чего нет в cache/backend/dev/modules/....
    //если надо, после тюнинга можно вызвать родительский метод
   
    parent::executeIndex($request);
  }

У меня просто переписуется даный метод, то есть выполняется только то что я хотел дополнить .
Как исправить?

7

Re: Методы propel:generate-admin

А что конкретно вы хотите сделать, переопределив метод? Потому что могут быть другие способы, чтобы выполнить поставленную задачу.

8

Re: Методы propel:generate-admin

Хочу чтоб при сохранении картинки выполнялась еще одна функция ресайза
Возможность вытянуть из сесии переменную и записать ее в базу
ну и т.д

9

Re: Методы propel:generate-admin

Я  для этих целей использую формы, например NewsForm.class.php

class NewsForm extends BaseNewsForm
{

  public function save($con =null)
  {
     //  $this->object - наш объект
     // Наши действия

    return parent::save($con);
  }

}

Создание форм и фильтров:

php symfony propel:build-forms
php symfony propel:build-filters

10

Re: Методы propel:generate-admin

Хочу чтоб при сохранении картинки выполнялась еще одна функция ресайза

я тоже такое на формах делаю

11

Re: Методы propel:generate-admin

Еще один вопрос , чтоб не создавать новую тему.
У меня есть модель с некоторим количеством полей. Как добавить к етой модели ищо одно поле не изменяя саму модель. Тоесть мне нужно добавить в форму поле которого нет в модели , а потом иметь к нему доступ в методах модели после срабатывания формы
Я устанавливаю виджет и валидейт , но потом в модели вызывая $this->поле - выдает ошыбку что метод несуществует

12

Re: Методы propel:generate-admin

я так понял, слово "поле" следует читать как "метод"?

покажите код, без него мы будем гадать на кофейной гуще долго

13

Re: Методы propel:generate-admin

$this->widgetSchema['tags']=new sfWidgetFormInput();
      $this->validatorSchema['tags']=new sfValidatorString();

ето обьявление нужного поля в форме
дальше используя модель нужно

   

public function save(PropelPDO $con = null)
    {

        $this->addTag($this->tags);
        return parent::save($con);
    }

$this->tags - етим я хочу достать значение "tags"

еслибы "tags" было в модели , то все ок, а так как ето инородный елемент то его надо както обьявить

14

Re: Методы propel:generate-admin

создейте в модели метод getTags(), опишите что он должен возвращать и пользуйтесь им где угодно - на формах в экшенах итд

15

Re: Методы propel:generate-admin

Я хочу просто в модели достать елемент формы

16

Re: Методы propel:generate-admin

Я хочу просто в модели достать элемент формы

Тут надо уже обычную форму создавать (наследник sfForm, а не sfFormPropel) и вручную сохранять от неё модель в экшине.
Для тагирования рекомендую плагин sfPropelActAsTaggableBehaviorPlugin default/smile

А по поводу ресайза - рассово верное решение такое:
1. В валидаторе устанавливается параметр validated_file_class

      $this->validatorSchema['file'] = new sfValidatorFileRU(array(
        'required'   => true,
        'path'       => sfConfig::get('sf_web_dir').'/images/users/',
        'mime_types' => 'jpeg_images',
        'max_size'   => 380000, // 360 kB
        'validated_file_class' => 'sfPhotoValidatedFile'
        ));

Теперь сам класс

class sfPhotoValidatedFile extends sfValidatedFile
{
  public function save($file = null, $fileMode = 0666, $create = true, $dirMode = 0777)
  {
     $file_name = parent::save($file, $fileMode, $create, $dirMode);
     $image = imagecreatefromjpeg($this->path.'/'.$file_name);
      далее ресайзими, сохраняем и 
     return $file_name;
  }
}

17

Re: Методы propel:generate-admin

Пентиум писал:

class sfPhotoValidatedFile extends sfValidatedFile
{
  public function save($file = null, $fileMode = 0666, $create = true, $dirMode = 0777)
  {
     $file_name = parent::save($file, $fileMode, $create, $dirMode);
     $image = imagecreatefromjpeg($this->path.'/'.$file_name);
      далее ресайзими, сохраняем и 
     return $file_name;
  }
}

А в середине этой функции можно как то вытянуть, например id объекта?

18

Re: Методы propel:generate-admin

нет.
зачем?

19

Re: Методы propel:generate-admin

Ну в классе job есть thumbnail и еще есть отдельно класс галерея поста. Я б хотел использовать этот метод, но чтоб прикрутить картинку к посту нужен post_Id.

20

Re: Методы propel:generate-admin

в этом методе происходит только обработка файла. а то что вы хотите нужно наверно в action делать или в методе save формы.

21

Re: Методы propel:generate-admin

Ага. Спасибо.)
В save наверное сделаю.)

22

Re: Методы propel:generate-admin

pentium133 пишет:

class sfPhotoValidatedFile extends sfValidatedFile
{
  public function save($file = null, $fileMode = 0666, $create = true, $dirMode = 0777)
  {
     $file_name = parent::save($file, $fileMode, $create, $dirMode);
     $image = imagecreatefromjpeg($this->path.'/'.$file_name);
      далее ресайзими, сохраняем и
     return $file_name;
  }
}

Делаю превью таким же образом, режу картинки с помощью плагина sfThumbnailPlugin. Картинка с оригинальным размером сохраняется в одной папке, уменьшенная копия в другой. Проблема в том, что если я заменяю или удаляю с админки изображение, уменьшенная копия не редактируется. Т.е. оригинальная картинка заменяется другой при правке, а в папку с превью добавляется новая. Подскажите в какую сторону копать, как дописать действия для уменьшенной копии изображения, что бы она заменялась и удалялась?

P.S. Форма автоматически созданная propel'ом , виджет для работы с этим полем использую sfWidgetFormInputFileEditable.

23

Re: Методы propel:generate-admin

gvozdik пишет:

Делаю превью таким же образом, режу картинки с помощью плагина sfThumbnailPlugin. Картинка с оригинальным размером сохраняется в одной папке, уменьшенная копия в другой. Проблема в том, что если я заменяю или удаляю с админки изображение, уменьшенная копия не редактируется. Т.е. оригинальная картинка заменяется другой при правке, а в папку с превью добавляется новая. Подскажите в какую сторону копать, как дописать действия для уменьшенной копии изображения, что бы она заменялась и удалялась?

P.S. Форма автоматически созданная propel'ом , виджет для работы с этим полем использую sfWidgetFormInputFileEditable.


Вижу, что пост оставлен давно, а ответа все нет, но присоединяюсь к вопросу, ибо встала аналогичная задача. Может кто подскажет?

24

Re: Методы propel:generate-admin

А что собственно подсказать? Ответа и не будет, пока кому-то не понадобится и он не напишет и не выложит готовое решение. sfWidgetFormInputFileEditable ничего не знает ни о sfThumbnailPlugin, ни о каких-либо уменьшенных копиях. Соответственно, единственное возможное решение - отнаследоваться и написать свой виджет, который будет учитывать существование уменьшенной копии и управлять ею.

Кагбэ фреймворк - это средство разработки, не более того. Все, что не реализовано в базовом функционале и не найдено в открытых решениях сторонних разработчиков - нужно писать самостоятельно. Если пять минут поиска в гугле по правильному набору ключевиков не дают ничего полезного - значит быстрее будет написать самому.