2011-07-31 11 views
0

マイコントローラ:CakePHPの - フォームの値が検証coudn't

class PostsController extends AppController 
{ 
    function index() { 
     $this->set('posts', $this->Post->find('all')); 
    } 
    function add(){ 
     if(!empty($this->data)) 
     { 
      $this->Post->save($this->data); 
      $this->Session->setFlash('the post was saved successfully'); 
      $this->redirect('/posts/index'); 
     } 
     else 
     { 
      $this->Session->setFlash('the post was not saved'); 
     } 
    } 
} 

マイモデル

class Post extends AppModel { 
    var $name = 'Post'; 
    var $validate = array(
     'title'=>array(
      'title_must_not_be_blank'=>array(
       'rule'=>'notEmpty', 
       'message'=>'$this post is missing a title' 
      ), 
      'title_must_be_unique'=>array(
       'rule'=>'isUnique', 
       'message'=>'A post with this title already exists' 
      ) 
     ), 
     'body'=>array(
      'body_must_not_be_blank'=>array(
       'rule'=>'notEmpty', 
       'message'=>'this post is missing the body' 
      ) 

     ) 
    ); 
} 

そして、私のビュー

<form action="<?= $this->base.'/posts/add' ?>" method="post"> 
    <label>title</label> 
    <input type="text" name="data[Post][title]" /><br /> 
    <label>body</label> 
    <textarea type="text" name="data[Post][body]"></textarea><br /> 
    <input type="submit" value="submit" /> 
</form> 
(私はケーキhtmlとフォームヘルパーを使用しないでください)

問題:

私は故意にouを残したフィールドは、フォームはデータベースに値を提出しました。

そして、私はhtml-helpersの使用を避けようとしています。

+1

"answer/rant"が削除されることを願って、ここでコメントします。ケーキは必要なだけ柔軟性があります。フレームワークに組み込まれたメカニズムを使用しないことを望みます。あなたは自由にそれをすることができます。 FormHelperを置き換えるために独自のコードを書き、それを使用してください。しかし、「私はフレームワークのツールを使用するつもりはありませんが、私のようにフレームワークを実行したいと思っています」と言うことは期待できません。それは完全に不合理です。 – cspray

+0

私は@Charlesに同意します。それはOS XをWindowsに置き換えて、あなたのMacがAppleが宣伝していることをしないと不平を言うようなものだ。 – JJJ

答えて

2

データが保存されましたか?データが検証されなくても、コントローラはページからあなたをリダイレクトするためです。

function add(){ 
    if(!empty($this->data)) { 
     if($this->Post->save($this->data)) 
     { 
      $this->Session->setFlash('the post was saved successfully'); 
      $this->redirect('/posts/index'); 
     } 
     else 
     { 
      $this->Session->setFlash('the post was not saved'); 
     } 
    } 
} 

次の問題は、検証メッセージがビューに表示されないことです。それらを作成するにはヘルパーが必要です。手動で行うには多くの作業が必要です。なぜあなたはそれらを使用していないのですか?

+0

データが保存されていると確信しています。それは検証がその仕事をしていることを意味します。 –

+0

私はフォームヘルパーを使用していません。なぜなら私はビュー内のhtmlコードを好みます。 –

+0

データが保存されている可能性がありますが、フォームヘルパーを使用しないように手作業で作業しない限り、検証メッセージは表示されません。私はこれを行うあなたの欲望を理解することができますが、私は間違いなくこのようなもののための少なくともフォームヘルパーを使用する、それはあなたの人生をはるかに簡単になります。 – cspray

0

私の答えは話題にならないかもしれませんが、フォームヘルパーによって生成された余分なHTML(フィールドセット、divで入力された入力、自動生成ラベル)を必要としないため純粋なhtmlを使用している場合、フォームヘルパーエレメントのオプションを常に使用できます

<label>title</label> <?php echo $this->Form->input('title', array('label'=>false, 'div'=>false, 'legend'=>false) );?>

しかし、私は完全に@Charlesと@Juhanaに同意する:それは規則だ、次の時にフレームワークの真の力を解き放つことができます。ですから、Cakeが広告として動作するようにしたい場合は、ドキュメントとしてアドバイスしてください。