cakePHP - значение формы не может быть подтверждено - PullRequest
0 голосов
/ 31 июля 2011

Мой контроллер:

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'
            )

        )   
    );
}

И мой взгляд (я не использую торт HTML и помощник по формам)

<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-помощников.

Ответы [ 2 ]

2 голосов
/ 31 июля 2011

Вы уверены, что данные были сохранены? Потому что контроллер перенаправит вас со страницы, даже если данные не проверяются.

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 голосов
/ 01 августа 2011

Мой ответ может быть не по теме, но если вы используете чистый html только потому, что вам не нужен дополнительный html, сгенерированный помощником по форме (например, fieldsets, ввод, заключенный в div, автоматически сгенерированная метка), тогда вы можете всегда используйте параметры элемента помощника формы например

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

Однако я полностью согласен с @Charles и @Juhana: истинная сила фреймворка может быть раскрыта при соблюдении его соглашений. Так что, если вы хотите, чтобы Cake работал так, как рекламируется, - внедряйте, как советуют docs.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...