2010-12-01 8 views
2

私はsymfony 1.4でモジュールを生成するとき、それは(例えば)を作成し、「新規」と、このような方法で「作成」:--non-verbose-templatessymfonyの生成

public function executeNew(sfWebRequest $request) 
{ 
    $this->form = new SomeForm(); 
} 

public function executeCreate(sfWebRequest $request) 
{ 
    $this->forward404Unless($request->isMethod(sfRequest::POST)); 

    $this->form = new SomeForm(); 
    $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName())); 
    if ($form->isValid()) 
    { 
    $res_object = $form->save(); 
    $this->redirect('results_show', $res_object); 
    } 

    $this->setTemplate('new'); 
} 

をそれは私がそれを修正(下記のコードのようなものを生成し、作成部分のみを表示する):

public function executeNew(sfWebRequest $request) 
{ 
    $this->forward404Unless($request->isMethod(sfRequest::POST)); 

    $this->form = new SomeForm(); 
    if ($request->isMethod(sfRequest::POST)) { 
    $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName())); 
    if ($form->isValid()) 
    { 
     $res_object = $form->save(); 
     $this->redirect('results_show', $res_object); 
    } 
    } 
} 

このようなデフォルト生成の理由は何ですか?私は以下の方法がよりコンパクトで、ルートとアクションを少なくし、最初と次の(エラーがあった場合)フォームの表示にURLを変更しないと思います。しかし、デフォルトの生成方法は、最高または最も頻繁に使用可能なものでなければなりません。だから、Sensio Labsの人は何を知っているのですか?

答えて

2

最初のテンプレートは、SymfonyでRESTfulアプリケーションを構築するのに適しています。

巧妙なsfObjectRouteCollectionクラスを使用してルートコレクションを作成する場合は、executeNewメソッドとexecuteCreateメソッドの両方が必要です。

新しいリスト、作成、編集、更新、削除、およびshow:デフォルトで

sfObjectRouteCollectionは、次のアクションのためのルートを作成します。

あなたがお好みのテンプレートが1つのURLのみを持っていることが正しいですが、あなたが教義/ Propelのフォームを使用して、(form_tag_forヘルパーされている場合、実際に、これは問題ではありません)。このヘルパーは、ルートコレクションの形式と名前を引数としてとり、コレクションから使用する正しいルート/ URLである自身を探し出します。

+0

しかし、そのような状況があります。ユーザーはフォームを入力しましたが(some_form/new)、間違いを犯しました(some_form/createにリダイレクトされました)。彼はこの作業を完了するための時間はもうありませんでしたが、彼は将来、いくらかの補充をしたいと思っています(またはフォームを補充するだけです)。この状況でユーザーは何をしますか?はい - ページをブックマークします。しかし、彼は戻ってくるとき、何を見ますか? 404!彼はPOSTメソッド(some_form/create)だけで動作するアクションに戻ります。私はそれが良いとは思わない。 – kpower

+0

newとcreateは同じURLを共有することができ、経路は要求タイプ別に区別することができます –

+0

もちろん、正しい設定を行うために独自のルールを追加する必要があります。私は正しい? – kpower

関連する問題