[CakePHP3] Setter(セッター)とGetter(ゲッター)をざっくりと知る。

前回、CakePHP3をインストールして、おためにしにユーザー管理を作ったが、パスワードが丸見えだった。

なので、次はパスワードの暗号化を行う。

まず、ModelのEntityのUser.phpを開く。

んで、クラス上部にuse句で、パスワードをハッシュ化するクラスのnamespaceを追加。

namespace App\Model\Entity;

use Cake\Auth\DefaultPasswordHasher; //これを追加
use Cake\ORM\Entity;

なんだか、C#な感じになったな~。
use でクラスを指定するから、NetBeans君でコード補完が気持ちいい。

C#で書くと、こんな感じかな。

using Cake.Auth.DefaultPasswordHasher;
using Cake.ORM.Entity;

namespace App.Model.Entity{
    class User : Entity{
       ....
    }
}

脱線した。

んで、以下のメソッドを追加する。

/**
 * パスワードセッター passwordに値をセットするときハッシュ化する。
 * @param type $value
 * @return type
 */
protected function _setPassword($value)
{
	$hasher = new DefaultPasswordHasher();
	return $hasher->hash($value);
}

上記は、passwordというカラム名をセットする際に、このセッターを通り、$valueにある値をハッシュクラスでハッシュ化した値を戻すことで、saveされる際に、結果的にその暗号化された値が保存される。

これは、CakePHP3でセッター(Setter)と呼ばれる機能で、命名規則に基づいているカラム名をCameCaseで紐付けて、データをセットする際に加工するっぽい。
中身ちらっと追いかけたら、それっぽい所があった。

$setter = '_set' . Inflector::camelize($p);
if ($this->_methodExists($setter)) {
    $value = $this->{$setter}($value);
}
$this->_properties[$p] = $value;

これで、試しに別のユーザーを作成したら、ちゃんとパスワードはハッシュ化されていた。
ワードラップが働いて、はみ出しまくってるけど(^^;)

CakePHP3-2-1

 

似たような感じで、$method = ‘_get’ . Inflector::camelize($property); という記述を見かけたので、ゲッター(Getter)もあるなと思い、下記のようなメソッドを追加。

protected function _getId($value)
{
	$value = $value * 100;
	return $value;
}

読み込みなおしてみると、下記のようにidがすべて100倍されるようになった。
CakePHP3-2-2

以上、CakePHP3のゲッター(Getter)とセッター(Setter)なお話。

パスワードのハッシュ化もできたので、次はFormでユーザー認証してみる。 >> [CakePHP3] ざっくりとフォーム認証

 

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>