Baranov_Dron
Новичок
класс Foto
Пример приведённый тут слегка упрощён, от требуемой задачи, для наглядности.
Использую symfony + phpDoctrinePlugin.
Есть форма добавления статьи, в ней можно вписывать теги данной статьи, название, текст, дату и выбрать изображения для заливки.
Потом скрипт добавляет изображения в папку uploads, и записывает в БД 1 запись в таблицу articles и несколько записей в таблицу foto.
Ну при отображение есть статья и внизу блок с превью картинок. По нажатию будет полное изображение в новом окне, всё понятно...
Идём дальше, есть класс
abstract class BaseArticles extends sfDoctrineRecord
{}
в котором указываются свойства таблицы, и от него наследуется класс
class Articles extends BaseArticles
{}
Ну и тоже самое с классом foto.
Дальше в контролере мы создаём запись типа
Ну теперь самое интересное и сложное для меня, кто должен отвечать за заливку фото, а также добавление его в БД?
Я решил проблему следующим образом,
перегрузил метод save()
Теперь вызов выглядит наподобие
Тоесть перетаскиванием изображения с временного хранилища в нужную папку занимается класс Foto, но у меня есть большие сомнения в правильности решения, например в таблице фото имеется столбец булевого типа preview, тоесть есть ли превью, и если нету, чтоб дать демону, запускаемому кроном понять, что для этого изображения сделать preview и значение столбика из false сделать в TRUE.
Но тогда класс Foto отвечает:
1) за создание preview
2) за заливку изображений
3) за добавление информации о изображение в БД
4) за удаление(строки в таблице + самих файлов рисунков)
5) и т.д.
Но по сути правильно ли, что класс foto занимается такими задачами?!
Я вообще думал, что этот класс должен только работать с БД.
И вопрос к пользователям доктрины! Ничего страшного не случится при перегрузки метода save и delete, вроде не должно, но всё же?
Пример приведённый тут слегка упрощён, от требуемой задачи, для наглядности.
Использую symfony + phpDoctrinePlugin.
Есть форма добавления статьи, в ней можно вписывать теги данной статьи, название, текст, дату и выбрать изображения для заливки.
Потом скрипт добавляет изображения в папку uploads, и записывает в БД 1 запись в таблицу articles и несколько записей в таблицу foto.
Ну при отображение есть статья и внизу блок с превью картинок. По нажатию будет полное изображение в новом окне, всё понятно...
Идём дальше, есть класс
abstract class BaseArticles extends sfDoctrineRecord
{}
в котором указываются свойства таблицы, и от него наследуется класс
class Articles extends BaseArticles
{}
Ну и тоже самое с классом foto.
Дальше в контролере мы создаём запись типа
PHP:
$art = new Articles;
$art->title = $request->getParameter('title');
$art->text = $request->getParameter('text') ;
$this->foto[]->name = 'test';
$this->foto[]->name = 'test';
$art->save();
Я решил проблему следующим образом,
перегрузил метод save()
PHP:
class Foto extends BaseFoto
{
public $file_object;
public function setFileObject($file)
{
$this->file_object = $file;
}
public function save(Doctrine_Connection $conn = null)
{
$file = $this->file_object;
$svimage = getimagesize($file->getTempName());
$this->extension = $file->getExtension($file->getOriginalExtension());
$this->filesize = $file->getSize();
$this->height = $svimage[1];
$this->width = $svimage[0];
$this->date = date('Y-m-d H:i:s');
parent::save($conn);
$file->save(sfConfig::get('sf_upload_dir').'/board/'.$this->id.$this->extension);
}
public function getRealName()
{
return $this->id.$this->extension;
}
}
PHP:
$art = new Articles;
$art->title = $request->getParameter('title');
$art->text = $request->getParameter('text') ;
$this->foto[]->name = 'test';
$this->foto[]->setFileObject($this->getValue('foto1'));
$this->foto[]->name = 'test';
$this->foto[]->setFileObject($this->getValue('foto2'));
$art->save();
Но тогда класс Foto отвечает:
1) за создание preview
2) за заливку изображений
3) за добавление информации о изображение в БД
4) за удаление(строки в таблице + самих файлов рисунков)
5) и т.д.
Но по сути правильно ли, что класс foto занимается такими задачами?!
Я вообще думал, что этот класс должен только работать с БД.
И вопрос к пользователям доктрины! Ничего страшного не случится при перегрузки метода save и delete, вроде не должно, но всё же?