1

私はSymfony 1.4とDoctrine 1.2とsfDoctrineGuardPluginを使用しています。私は記事作成ページを持っています。私の記事の表には、どのユーザー(著者)が書いたかを保存するためのprofile_idフィールドがあります。sfDoctrineGuardPluginを使用しています。ユーザーの選択なしでidフィールドを設定したい

私の問題は、ユーザーが記事を書いて保存すると、私がユーザーからprofile_idを取得できる場合でも、私はprofile_idを自動的に設定できません。

私のarticleFormクラスでは、選択ボックスのデフォルト値を設定できますが、ユーザーはそれを変更できます。私はそれを読み取り専用にしようとすると、profile_idはdbに保存することはできません。私が使用し、それが読み取り専用にするために

// getting user_id $user = sfContext::getInstance()->getUser(); $user_id = $user->getGuardUser()->getId();

// converting for profile table 
$converter = Doctrine_Query::create() 
      ->select('*') 
      ->from('profile') 
      ->where('sf_guard_user_id = ?', $user_id); 

// fetching 
$result = $converter->fetchArray(); 

$this->widgetSchema->setDefault('profile_id', $result[0]['id']); 

$this->offsetUnset("profile_id");

しかし、この方法で、私が前に言ったようにし、PROFILE_IDここ

はでArticleFormクラスからの私のconfigure関数でありますdbに保存できません。コードの2番目の部分がなければ、現在のIDがデフォルトとして指定されましたが、ユーザーはそれを変更できます。

どうすれば解決できますか?何か案が? ありがとうございました...

+2

フォームで 'sfContext :: getInstance()'を使用する代わりに、コンストラクタにユーザーオブジェクトまたはuser_id値を注入する必要があります。また、これは助けてください:http://stackoverflow.com/questions/4742099/symfony-admin-generator-add-user-id-before-saving/4744077#4744077 – Maerlyn

+0

ええ、それは私が探しているものです。おかげで多くのMaerlyn –

答えて

0

あなたはデフォルト値を保存したい場合、保存することができるようにフォームに公開する必要はありません。代わりに、アプリケーションにロジックを持たせる必要があります。オブジェクトを保存する前に、デフォルトにしたい値を設定してください。 preInsertメソッドを使用することで、Peerクラスを平和的に利用することもできます。

+0

Maerrlynがあなたの前にあなたのコメントを送信するリンクは私のprobを解決しました。ありがとうcelalo –

関連する問題