2011-01-18 17 views
4

私はSymfonyフレームワークを初めて知りました。Symfony Admin Generator Doctrine executeCreate

送信したフォームを管理領域から傍受してデータを変更したいと考えています。

は、ここで私はこれまで(基本的な形で)持っているものだ...私のフォームが含まれていない

/apps/backend/modules/proposition/actions/action.class.php

class propositionActions extends autoPropositionActions { 

    public function executeCreate(sfWebRequest $request) { 
    // modify the name 
    $name = $request->getParameter('name'); 
    $name = $name . ' is an idiot'; 
    $request->setParameter('name', $name); 

    return parent::executeCreate($request); 
    } 

}

名前フィールド:

/apps/backend/modules/proposition/config/generator.yml

generator: 
    class: sfDoctrineGenerator 
    param: 
    model_class:   Proposition 
    theme:     admin 
    non_verbose_templates: true 
    with_show:    false 
    singular:    ~ 
    plural:    ~ 
    route_prefix:   proposition 
    with_doctrine_route: true 
    actions_base_class: sfActions 

    config: 
     actions: ~ 
     form: 
     display: [name, icon, overview, published] 

ノーよそれはあなたがいないのを参照する必要があるファイルの場合は必ずtは、それはHTMLで間違いだ:私はフォームを送信すると、それはちょうど私の名前を保存し

<input type="text" id="proposition_name" name="proposition[name]">

。私はそれが私の名前を保存することを望んでいる、 '馬鹿です。

感謝

答えて

2

は、私はあなたが正しい軌道にピーターにあると思いますが、それはどんな効果を持っているために遅すぎる$requestを修正します。

the "doClean" part of the Form's validatorでは、このような着信データの変更を行うことができます。

特別な処理が必要な場合は、生成されたprocessForm()機能を無効にする方が理にかなっています。 apps/backend/modules/proposition/actions/action.class.phpcache/frontend/dev/modules/autoProposition/actions/actions.class.phpからコピーして、ハッキングを開始してください。

+0

おかげネイサン、PROCESSFORM()私が探していた機能でした。私はそれを拡張しました、そして、今私が望むように働いています。私はautoPropositionActionsクラスがどこに住んでいるのか疑問に思っていました。これを見るともっと遊ぶことができました:) –

+0

processformのフィールドの値を変更する構文は何ですか?私は現在のログインしているユーザのIDにauthor_idを設定しようとしています... – Manu

+0

@Manuそれはあなたが[あなたがそれについて尋ねた質問](http:// stackoverflow。com/questions/4742099/autodel-a-field-in-symfony-admin-generator)を参照してください。がんばろう。 – Nathan

2

あなたの行動でなぜそれをしたいのですか?最も適した場所はフォームそのものだと思います。

あなたは*アップデートを追加することにより、カラム法任意の列の値を変更することができます:あなたは、フォームが使用されている他の場所に付加した文字列「馬鹿です」したくない場合は:

class PropositionForm extends BasePropositionForm 
{ 
    public function updateNameColumn($name) 
    { 
    return $name . ' is an idiot'; 
    } 
} 

注意を元のフォームをサブクラス化してそこにメソッドを追加することができます(つまりAdminPropositionForm内)。

admin生成モジュールで使用されるフォームは、モジュールの構成クラス(propositionGeneratorConfiguration)でoverFormat getFormClass()メソッドを使用して変更できます。これは、使用するフォームクラスの名前を返す必要があります。

注2:あなたは異なったフォームの値にアクセスする必要があります。

$proposition = $request->getParameter('proposition', array()); 
$name = $proposition['name']; 
+2

ありがとうございました。いったんprocessForm()を拡張すると、私はそれを次のように使いましたが、 $ parms = $ request-> getParameter($ form-> getName()); $ name = $ parms ['name']; –

+0

@Peter:そうです。 $ form-> getName()を使用するほうが明示的に名前を使用するよりも優れています。 –

関連する問題