ホームページ  >  記事  >  バックエンド開発  >  CakePHP でフォーム検証を使用するにはどうすればよいですか?

CakePHP でフォーム検証を使用するにはどうすればよいですか?

WBOY
WBOYオリジナル
2023-06-04 17:40:341196ブラウズ

CakePHP は、人気のある PHP Web アプリケーション フレームワークです。 Web 開発プロセスを簡素化するための多くの強力なツールと機能を提供します。フォームの検証は、フォームを開発するときに必要な手順です。この記事では、CakePHP でフォームバリデーションを使用する方法を紹介します。

CakePHP のフォーム検証は、悪意のあるユーザーによる悪意のあるデータの送信を防ぎ、アプリケーションを保護するのに役立つ強力な検証システムです。これにより、一連の検証ルールを定義し、フォーム データがこれらのルールに準拠しているかどうかを確認できます。送信されたデータが無効な場合、CakePHP は適切なエラー メッセージを表示します。

まず、ユーザー モデルを作成する必要があります。このモデルは、CakePHP が提供するコマンドを使用して作成できます。

$ bin/cake bake model User

これにより、アプリケーション内に「User」という名前のモデルが作成され、データベース内に対応するテーブルが作成されます。

次に、このモデルで一連の検証ルールを定義する必要があります。 User モデルの「validationDefault」メソッドを使用して、これらのルールを定義できます。このメソッドは、一連のプロパティと対応する検証ルールを含む配列を返す必要があります。

// src/Model/Entity/User.php

namespace AppModelEntity;

use CakeORMEntity;

class User extends Entity
{
    protected $_accessible = [
        '*' => true,
        'id' => false,
    ];

    protected function _setPassword($password)
    {
        return (new DefaultPasswordHasher)->hash($password);
    }

    protected function _getFullName()
    {
        return $this->_properties['first_name'] . ' ' . $this->_properties['last_name'];
    }

    protected function _getAge()
    {
        $now = new DateTime();
        $birthDate = new DateTime($this->_properties['birth_date']);

        return $now->diff($birthDate)->y;
    }

    protected function _setAge($age)
    {
        $this->_properties['birth_date'] = (new DateTime("-$age years"))->format('Y-m-d');

        return $age;
    }

    protected function _validationDefault(Validator $validator)
    {
        $validator
            ->notEmpty('username', 'A username is required')
            ->notEmpty('password', 'A password is required')
            ->add('password', [
                'length' => [
                    'rule' => ['minLength', 8],
                    'message' => 'Password must be at least 8 characters long',
                ]
            ])
            ->notEmpty('first_name', 'A first name is required')
            ->notEmpty('last_name', 'A last name is required')
            ->add('email', 'valid-email', [
                'rule' => 'email',
                'message' => 'Please enter a valid email address'
            ]);

        return $validator;
    }
}

上記のコードでは、ユーザー名とパスワードを空にすることはできず、パスワードには少なくとも 8 文字が含まれている必要があり、姓と名は空にすることはできず、電子メールは有効である必要があるという検証ルールを定義します。フォームデータがこれらのルールに準拠していない場合、CakePHP は適切なエラーメッセージを表示します。

次に、ビュー内にフォームを作成し、作成したばかりのユーザー モデルに接続する必要があります。 CakePHP が提供する FormHelper を使用してフォームを作成できます。このヘルパーは、フォーム要素を迅速に作成するのに役立つ一連の補助関数を提供します。まず、ビュー ファイルに FormHelper を含める必要があります。

// src/Template/Users/add.ctp

<?= $this->Form->create($user) ?>
<?= $this->Form->input('username') ?>
<?= $this->Form->input('password') ?>
<?= $this->Form->input('first_name') ?>
<?= $this->Form->input('last_name') ?>
<?= $this->Form->input('email') ?>
<?= $this->Form->button(__('Submit')) ?>
<?= $this->Form->end() ?>

上記のコードでは、$this->Form->create($user) メソッドを使用してフォームを作成し、追加しました。 $user 変数で表されるモデルに接続します。次に、いくつかの $this->Form->input() メソッドを使用して、入力ボックスやドロップダウン リストなどのフォーム要素を作成しました。最後に、$this->Form->button() メソッドを使用して送信ボタンを作成します。

これで、ユーザーがフォームを送信すると、コントローラーで $user モデルを使用してデータを検証できるようになります。フォーム データをモデルの validate() メソッドに渡し、戻り値が空の配列かどうかを確認できます。返された配列が空でない場合は、フォーム データが定義した検証ルールに準拠していないことを意味します。この配列を使用してエラー メッセージを表示し、フォーム ページにリダイレクトできます。

// src/Controller/UsersController.php

namespace AppController;

use CakeORMTableRegistry;

class UsersController extends AppController
{
    public function add()
    {
        $user = $this->Users->newEntity();

        if ($this->request->is('post')) {
            $user = $this->Users->patchEntity($user, $this->request->getData());

            if ($this->Users->save($user)) {
                $this->Flash->success(__('The user has been saved.'));

                return $this->redirect(['action' => 'index']);
            }

            $this->Flash->error(__('Unable to add the user.'));
        }

        $this->set('user', $user);
    }
}

上記のコードでは、$newUser エンティティを作成し、フォーム データを $this->Users->patchEntity() メソッドに渡します。次に、$this->Users->save() メソッドを使用してエンティティをデータベースに保存しようとします。エンティティが正常に保存された場合は、$this->Flash->success() メソッドを使用して成功メッセージを表示し、ユーザーをユーザー リスト ページにリダイレクトします。それ以外の場合は、$this->Flash->error() メソッドを使用してエラー メッセージを表示し、ユーザーをフォーム ページにリダイレクトします。

一般に、CakePHP のフォーム検証システムは非常に強力で柔軟なシステムです。これにより、一連の検証ルールを定義し、フォーム データの検証を実行できるようになります。フォームデータがこれらのルールに準拠していない場合、CakePHP は適切なエラーメッセージを表示します。 CakePHP のフォーム検証を使用すると、アプリケーションに正しく安全なデータが含まれていることを確認できます。

以上がCakePHP でフォーム検証を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。