2016-10-13 2 views
0

Я создаю расширение для редактирования записей tt_news в frontend. Я установил setIgnoreEnableFields(TRUE) в свой репозиторий. Но если я пытаюсь изменить скрытую запись, я получаю ошибкуРедактировать скрытые записи в frontend

Объект с идентичностью «12345" не найден.

Любое решение для этого?

ответ

1

Проблема заключается в PropertyMapping. Если extbase попытается назначить uid (12345) объекту домена (tt_news), значение параметра setEnableFields в репозитории не соблюдается. Таким образом, вы должны сами получить объект.

Простым решением является сделать это при инициализации * Действие для каждого действия «показать». Для editAction пример:

public function initializeEditAction() { 
    if ($this->request->hasArgument('news')) { 
    $newsUid = $this->request->getArgument('news'); 

    if (!$this->newsRepository->findByUid($newsUid)) { 
     $defaultQuerySettings = $this->newsRepository->createQuery()->getQuerySettings(); 
     $defaultQuerySettings->setIgnoreEnableFields(TRUE); 
     $this->newsRepository->setDefaultQuerySettings($defaultQuerySettings); 

     if ($news = $this->newsRepository->findByUid($newsUid)) { 
     $this->request->setArgument('news', $news); 
     } 
    } 
    } 
} 

Жесткая часть предназначена для того, чтобы объект обновлялся. Как я никогда не пытаюсь это я нашел TypeConverter для извлечения и скрытых записей в https://gist.github.com/helhum/58a406fbb846b56a8b50

Может быть, вместо того, чтобы зарегистрировать TypeConverter для всего (как пример в ext_localconf.php) вы можете попытаться назначить его только в initializeUpdateAction

public function initializeUpdateAction() { 
    if ($this->arguments->hasArgument('news')) { 
    $this->arguments->getArgument('news')->getPropertyMappingConfiguration() 
     ->setTypeConverter('MyVendor\\MyExtension\\Property\\TypeConverters\\MyPersistenObjectConverter') 
    } 
} 
+0

Первое решение будет работать, но в updateAction мы должны получить newsUid с помощью $ this-> request-> getArgument ('news') ['__ identity']. Nest Я проведу решение TypeConverter. Благодаря! –

+0

И TypeCpnverter на https://gist.github.com/helhum/58a406fbb846b56a8b50 также отлично подойдет для меня! –

2

Я угадывание вас используют действие, подобное

/** 
* Single view of a news record 
* 
* @param \Vendor\Ext\Domain\Model\News $news news item 
*/ 
public function detailAction(\Vendor\Ext\Domain\Model\News $news = null) 

Ваша проблема заключается в том, что Repository - нет используется для записи записи.


В качестве решения, удалить аргумент, очистить кэш и попробовать что-то вроде этого

/** 
* Single view of a news record 
* 
* @param \Vendor\Ext\Domain\Model\News $news news item 
*/ 
public function detailAction() { 
    $id = (int)$this->request->getArgument('news'); 
    if ($id) { 
     $news = $this->newsRepository->findByUid($previewNewsId); 
    } 
} 

Теперь вы можете управлять QuerySettings и использовать их.

+0

Хорошо. Поэтому я могу открыть форму редактирования. Но updateAction wil –

+0

UpdateAction также выдаст ошибку –

+0

без какого-либо кода и сообщения об ошибке, никто не сможет вам помочь. Извините –

Смежные вопросы