PHP
CakePHP

Cakephp2→3への移植

CakePHP3について全く触っていなかったので、CakePHP2で作成したWebシステムを移植してみた感想。
まずフォルダ構成が大きく変わっているのに戸惑う。src配下にすべて作成したものを配置するようだ。
configではdatabase.phpがなく、app.phpに纏められている。

大きく躓いたのが認証。
Authの使用方法などは大幅に変わっていないのだけれど、CakePHP2で使用していたSimplePasswordHasherがなく、
通常ではDefaultPasswordHasherが使用されることになっている。
ハッシュ化の方式が異なるのでパスワードを入力しても不一致扱いとなってしまう。
sha1でハッシュ化しているものを移植したい場合は、WeakPasswordHasherを使用する。

以下sha1でのサンプル。

AppControllerのinitialize
       $this->loadComponent('Auth', [
           'authenticate' => [
               'Form' => [
                   'userModel' => 'User',
                   'fields' => ['username' => 'username', 'password' => 'password'],
                   'passwordHasher' => ['hashType' => 'sha1','className' => 'Weak']
               ],
           ],
           'loginRedirect' => [
               "controller" => "main",
               "action" => "index"
           ],
           'logoutRedirect' => [
               "controller" => "login",
               "action" => "index"
           ],
       ]);

DefaultPasswordHasherではPHPのpassword_hashでハッシュ化するため、PASSWORD_DEFAULT またはPASSWORD_BCRYPTのみの模様。
Sha256などでハッシュ化したい場合は、上記のhashTypeで指定すればいけるはず。
合わせて、app.phpのsaltも変更する事で認証OK。