2016-10-13 2 views
0

フロントエンドでtt_newsレコードを編集する拡張機能をビルドしています。 setIgnoreEnableFields(TRUE)を私のリポジトリに設定しました。私は隠されたレコードを編集しようとした場合 しかし、私はエラーにアイデンティティ「12345" とフロントエンドで隠しレコードを編集する

オブジェクトを取得しますが見つかりませんでした。

このための任意のソリューション?

答えて

1

問題はPropertyMappingです。 extbaseがドメインオブジェクト(tt_news)にuid(12345)を割り当てようとすると、リポジトリの "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); 
     } 
    } 
    } 
} 

ザ・ハードの部分は、オブジェクトを更新するために取得することです。私はhttps://gist.github.com/helhum/58a406fbb846b56a8b50

にも隠されたレコードをフェッチするにTypeConverterを発見した私はこれをしようとしないようたぶん、代わりにあなただけのinitializeUpdateAction

public function initializeUpdateAction() { 
    if ($this->arguments->hasArgument('news')) { 
    $this->arguments->getArgument('news')->getPropertyMappingConfiguration() 
     ->setTypeConverter('MyVendor\\MyExtension\\Property\\TypeConverters\\MyPersistenObjectConverter') 
    } 
} 
でそれを割り当てるために試すことができます( ext_localconf.phpの例のように)すべてのためのTypeConverterを登録します
+0

あなたは最初の解決策は動作しますが、updateActionでは、$ this-> request-> getArgument( 'news')['__ identity']によってnewsUidを取得する必要があります。 ネストTypeConverterソリューションをテストします。ありがとう! –

+0

また、https://gist.github.com/helhum/58a406fbb846b56a8b50のTypeCpnverterも素晴らしい機能を発揮します。 –

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) 

のようなアクションを使用しています210はではありません。はレコードの取得に使用されます。解決策として


、引数を削除し、キャッシュをクリアして、今、あなたはQuerySettingsを操作し、それらを使用することができる

/** 
* 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); 
    } 
} 

のようなものを試してみてください。

+0

編集フォームを開くことができます。しかし、updateAction wil –

+0

updateActionは、コードとエラーメッセージなしでエラー –

+0

をスローします。誰もあなたをさらに助けることができません。申し訳ありません –

関連する問題