Windowsで始めるCakePHP4

CakePHP4のメモ

380 views

Postsテーブルにstatusというプロパティ変数があり、文字列には次のどちらかが入力されることを期待しているとする。

  • 新規追加
  • 下書き

それ以外の文字列は受け付けないこととする。
その場合、/src/Model/Entity/Post.phpに次の2行を追加する。

const STATUS_NEW = '新規追加';
const STATUS_DRAFT = '下書き';

次に、Postエンティティに'status'プロパティに許可された文字列のみを受け入れるカスタムセッターを追加する。

public function _setStatus($status)
{
    $allowedStatuses = [self::STATUS_NEW, self::STATUS_DRAFT];

    if (in_array($status, $allowedStatuses)) {
        return $status;
    }

    throw new InvalidArgumentException("Invalid status value. Allowed values are '新規追加' and '下書き'.");
}

これで、Postエンティティのstatusプロパティに対して、許可された文字列だけが登録されるようになる。

最後にフォームでセレクタを作成し、許可された文字列を選択できるようにする。
例えば/usr/Template/Post/add.phpというビューファイルがある場合、次のようにセレクタを作成する。

<?php
use App\Model\Entity\Post;

echo $this->Form->create($article);
// 他のフォーム要素

echo $this->Form->control('status', [
    'type' => 'select',
    'options' => [
        Article::STATUS_NEW => '新規追加',
       Article::STATUS_DRAFT => '下書き'
    ],
'empty' => '選択してください'
]);

// 他のフォーム要素
echo $this->Form->button(__('Submit'));
echo $this->Form->end();

これで、statusプロパティに対して「新規追加」または「下書き」のいずれかの文字列を選択するセレクタが作成される。
このセレクタを使って、ユーザーが許可された文字列のみを選択できるようになる。

まとめると以下となる。


<?php
namespace App\Model\Entity;

use Cake\ORM\Entity;
use InvalidArgumentException;

class Post extends Entity
{
    const STATUS_NEW = '新規追加';
    const STATUS_DRAFT = '下書き';

    protected $_accessible = [
        'status' => true,
        // 他のプロパティに対するアクセス制御を追加
        // ...
    ];

    public function _setStatus($status)
    {
        $allowedStatuses = [self::STATUS_NEW, self::STATUS_DRAFT];

        if (in_array($status, $allowedStatuses)) {
            return $status;
        }

        throw new InvalidArgumentException("Invalid status value. Allowed value are '新規追加' and '下書き'.");

_setStatusについて

CakePHPでは、_set<PropertyName>という形式のメソッドをエンティティ内に定義することで、プロパティの値がセットされる際にカスタムの処理を実行できる。
これらのメソッドは、"mutator"または"setter"メソッドと呼ばれる。

_setStatus()メソッドは、statusプロパティの値がセットされる際に自動的に呼び出されるmutatorである。
CakePHPのエンティティは、マジックメソッドを利用して、このようなメソッドを自動的に呼び出す。

_setStatus()が勝手に呼ばれる理由は、CakePHPのエンティティクラスが__set()マジックメソッドを実装しているからである。
これにより、プロパティに値をセットする際に、対応する_set<PropertyName>メソッドが存在すれば、そのメソッドが自動的に呼び出される。

Page 13 of 17.

前のページ 次のページ



[添付ファイル]

1.php_xdebug-3.0.4-8.0-vs16-x86_64.dll  


お問い合わせ

プロフィール

マッスル

自己紹介

本サイトの作成者。
趣味:プログラム/水耕栽培/仮想通貨/激辛好き
プログラムは趣味と勉強を兼ねて、のんびり本サイトを作っています。
フレームワークはdjango。
仮想通貨はNEMが好き。
水耕栽培は激辛好きが高じて、キャロライナ・リーパーの栽培にチャレンジ中。

サイト/ブログ

https://www.osumoi-stdio.com/pyarticle/

ツイッター

@darkimpact0626