2015-09-16 2 views
1

Я этот код, который создает новый образ на основе нового файла добавляется к файловой системе, но не в БД:SilverStripe Изображение не DataObject доступны после создания

$image = Image::create(); 
$image->Filename = 'assets/Art/e3434cc7-d348-491a-9dc8-325af3d9086d.jpg'; 
$image->write(); 

$images = Image::get(); 
$image = $images->last(); 

$vd = new ViewableData(); 
$ad = new ArrayData(array(
    'Image' => $image 
)); 
$strHTML = $vd->customise($ad)->renderWith('Art'); 

Art.ss содержит только $Image.SetWidth(100)

Игнорирование того, что запрос не ищет идентификатор или что-то еще ... Почему изображение отображается только в $strHTML, если я получаю изображение из БД после создания? Если удалить код, приведенный ниже, $strHTML пуст:

$images = Image::get(); 
$image = $images->last(); 
+0

Что дает вам 'var_dump ($ image);' или '$ Image.Debug' (в вашем шаблоне)? Объект изображения? Имеется ли файл изображения? Являются ли активы/Art/доступны для записи на веб-сервер? ты покраснел? – wmk

+0

'var_dump ($ image)' после '$ image-> write()' выплескивает объект Image, но по какой-то причине свойство Filename является 'assets/e3434cc7-d348-491a-9dc8-325af3d9086d.jpg' not 'assets/Art/e3434cc7-d348-491a-9dc8-325af3d9086d.jpg', как и при извлечении из БД. Существуют и другие отличия: https://www.diffnow.com/?report=scxft. Левый документ - один раз после записи, правый документ создается сразу после, а затем извлекается из БД. – Dave

+0

это два разных изображения, так как они имеют разные идентификаторы, см. $ Record array ... Как файл копируется в активы? И мне интересно, почему создается другой файл ... – wmk

ответ

1

Существует сеттер доступны так, используя что само по себе может помочь, но вы можете также необходимо присвоить идентификатор родительской папки для объекта:

$pFolder = Folder::find_or_make('Art'); 
if ($pFolder) { 
    $image->setParentID($pFolder->ID); 
    $image->setFilename('assets/Art/e3434cc7-d348-491a-9dc8-325af3d9086d.jpg'); 
} 
Смежные вопросы