0

これが機能しない理由がわかりません (私は CakePHP 2.1 を使用しており、2.0 も試しました):

モデルはこちら

class User extends AppModel
    {
        public $validate = array('username' => array('rule' => 'email'));
    }

コントローラーはこちら

class UsersController extends AppController
    {
        function index()
        {
            $this->set('users', $this->User->find('all') );
        }

        function add()
        {
             if (!empty($this->request->data)) 
             {            
                if ($this->User->save($this->request->data)) 
                {                
                    $this->Session->setFlash('User has been registered.');
                    $this->redirect(array('action' => 'index'));            
                }        
             }
        }
    }

ここにビューを追加します

<h1>Add Post</h1>
<?php
    echo $this->Form->create('User');
    echo $this->Form->input('username');
    echo $this->Form->input('password');
    echo $this->Form->end('Register');
?>

そして、それは私が書いたものを検証します...そして、ユーザー名が電子メールかどうかを確認する必要があります...

それは不可能だ!それは働かなければなりません!-しかし、そうではありません...

Cake php 2.0 でもチェックしましたが、まだ動作しません。

多分私のdbテーブルに何か問題がありますか???

CREATE TABLE `users` (
   `id` int(10) unsigned not null auto_increment,
   `username` varchar(50),
   `password` varchar(50),
   `created` datetime,
   `modified` datetime,
   PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=9;

これは非常に奇妙です-私のアプリフォルダーには、「UserModel.php」、「UserController.php」、「add.ctp」、およびdb構成のみを追加します-上記で書いたものすべて-そして検証は機能しません!!!

4

4 に答える 4

2

$validate配列が正しく宣言されていないと思います。

これを試して:

$validate = array('username' => array(
                        'email' => array(
                            'rule' => array('email')
                        )));

またはこれ:

$validate = array('username' => 'email');

http://book.cakephp.org/2.0/en/models/data-validation.htmlを参照してください

于 2012-04-22T09:48:33.647 に答える
1

わかりました、私は何が間違っているか知っています:

  1. 私のモデルファイル名は「UserModel.php」と呼ばれ、「User.php」である必要があります
  2. ファイル 'User.php' の先頭に、'App::uses('AppModel', 'Model');' を配置する必要がありました。
于 2012-04-22T11:59:50.210 に答える
1

コントローラーに書き込む必要があります( UserController )

($this-User->set($this->request->data)

関数が検証される前に、ご覧のとおり。

 function add()
    {
         if (!empty($this->request->data)) 
         {     $this->User->set($this->request->data);
            if ($this->User->validates()) 
            {   $this->User->save($this->request->data)
                $this->Session->setFlash('User has been registered.');
                $this->redirect(array('action' => 'index'));            
            }        
         }
    }
于 2013-11-26T21:18:12.507 に答える
0

わかりました..これが私がしていることです(ユーザー名をメールに変更します)

$components = array('Auth' => array('authenticate' => array('Form' => array('fields' => array('username' => 'email', 'password' => 'password')))), 'Email');

これは機能します。CakePHP 1.3 では、ユーザー名 (電子メール) とパスワードの両方を指定する必要がありました。そのため、CakePHP 2.1 に移行したときも同じことを続け、検証に問題はありませんでした。

必要なものはすべてここで確認できます:クックブック

于 2012-04-22T07:26:45.600 に答える