2010-11-29 10 views
1

私は最近、私のコーディングの質を向上させるために、さまざまなことについていくつかの読書をしてきました。同じページに投稿するとよい練習ですか?

私は現在のアプリケーションでこのタイプのスニペットを頻繁に使用して同じページにフォームを投稿することをお勧めしますか?

public function addAction(){ 
    $form = new Application_Form_Add(); 

    $this->view->form = $form; 

    if(!$this->_request->isPost() && $form->isValid($this->_request->getParams())){ 
     $mapper = new Application_Model_ModelMapper(); 
     $model = new Application_Model_Model($form->getValues()); 

     if(!$mapper->save($model)){ 
      $this->view->messages('an error occurred etc ... '); 
      return;  
     } 

     $this->_helper->redirector->gotoRoute(array('id' => $model->id), 'model_view'); 
    } 
} 

私の追加アクションは、フォームをGETリクエストに提示し、POSTリクエストで処理します。

私はこのarticleのMatthew Weier O'Phinneyを訪れました。誰もが彼が現時点のPHPの恩人の一人であることに同意できると思います。彼の例では、フォームを表示するために2つの異なるアクションを行い、1つはフォームを処理します。したがって、フォームが検証されない場合、彼は$this->renderで再生してフォームビューを再描画します。

同じページにフォームを送信するのは悪い習慣ですか?はいの場合はなぜですか?

答えて

2

コードの可読性と保守性のために、同じフォームに関連付けられているにもかかわらず、2つの異なるコントローラアクションが2つの関数/スクリプトとして分離されています。

すべてのCRUD操作が1つの関数/スクリプトで結合されているとします。それは面倒です。

+0

(注意点として、私は、コントローラロジックに参照のうえてるロジックに、すべてのデータ・ロジックがとにかくモデルにする必要があります)私はオフに考えることが理由の一つという。 'this-> render'で全体をプレイした後はちょっと面倒です。 – RageZ

1

私はそれが悪いとは思わない。

私たちは同じページと別のページでこれを行います。

どちらの方法も正しいです。

シングルページを使用すると、並べ替えと甘い方法と2ページを使用して私たちのコードは管理された方法を提供します。

私の意見ではどちらもequallです。

1

私の私はそれに対して1つのアクションを使用することをお勧めします。これはすべてのものを一緒に保ちます。 1つを有する

  • addAction(保存するsaveActionを使用しています)
  • editAction(保存するsaveActionを使用しています)
  • saveAction(自分自身をレンダリングされません)

:O'Phinneyのコントローラは、このようにトイレでしたすべてのコントローラーのセーブ/エディットロジックのためのメソッドがそれを作る特別な理由(想定)!冷たい、すべてを1か所に保ちます。しかし、これはまったく同じロジックを持つためには、編集と追加の両方が必要でした。すぐに行動に応じて、異なるロジックを持っている

public function saveAction() 
{ 
    if($action == 'edit) 
    { 
     // edit logic 
    } else if($action == 'add') 
    { 
     // add logic 
    } 
} 

のような任意のif/elseがあるので、これは完全にワンアクションのアイデアを活用します。したがって、ロジックが常に同じで、変更する可能性が非常に低いことがわかっている場合、これはコーディング作業の多くを節約する方法です:)。

少し異なっているあなたの追加/編集ロジック一方、私は一緒に属する一緒にすべてのロジックを保つだろうが:

  • addAction(フォームを印刷し、POSTを節約)
  • editAction

これはコードの重複のように見えるかもしれませんが、私の編集/追加アクションには約3-6行のコードが含まれています。しかし、いずれかの論理が変わるとすぐに、あなたは本当にその場所を知っています。

これは個人的な意見であり、私は物事が複雑になるとすぐに別々の行動に固執します。

関連する問題