我有一个表单PhotoForm,它有一个ebbed的BlobDataForm。
我可以使用blob_data表保存blbo数据,我的问题来了。
我有2个字段,image_width和image_height。
当blob保存时,我也想保存这些细节。
我已经覆盖了doSave();
protected function doSave($con = null)
{
if (null === $con)
{
$con = $this->getConnection();
}
$this->updateObject();
$blobData = new BlobData();
$this->saveEmbeddedForms($con);
$this->getObject()->setBlobData($this->getEmbeddedForm('blob_data')->getObject());
$this->getObject()->save($con);
}
我是否还需要覆盖saveEmbeddedForms()?
由于
编辑:
好的,所以我似乎需要覆盖:
processValues()
我在获取图像宽度和高度属性方面遇到了麻烦。
有谁知道我该怎么做?
由于
答案 0 :(得分:1)
如果您可以从blob_data字段获取这两个信息,则可以覆盖BlobData类的preSave方法,该方法在保存对象之前调用:
public function preSave($event)
{
//get the information from the blob_data
$this->image_width = ... ;
$this->image_height = ... ;
}
答案 1 :(得分:0)
是的,所以在那之后,我不得不重写saveEmbeddedForms:
public function saveEmbeddedForms($con = null, $forms = null)
{
if (null === $con)
{
$con = $this->getConnection();
}
if (null === $forms)
{
$photos = $this->getValue('blob_data');
$forms = $this->embeddedForms;
foreach ($this->embeddedForms['blob_data'] as $name => $form)
{
if (!isset($photos[$name]))
{
unset($forms['blob_data'][$name]);
}
}
}
foreach ($forms as $form)
{
if ($form instanceof sfFormObject)
{
$form->saveEmbeddedForms($con);
$blobData = $form->getObject()->getBlobData();
$imageStream = stream_get_contents($blobData);
$image = imagecreatefromstring($imageStream);
$form->getObject()->setImageWidth(imagesx($image));
$form->getObject()->setImageHeight(imagesy($image));
$form->getObject()->setFileExtension('jpg');
//return parent::preSave($con);
$form->getObject()->save($con);
}
else
{
$this->saveEmbeddedForms($con, $form->getEmbeddedForms());
}
}
}
这似乎对我有用
由于