だ。ログ。

開発とかスノボとかやきうとか。

EC-CUBE3の会員のパスワード文字数の上限と下限を変える

パスワードの文字数がデフォルトでは8文字~32文字と長め。
別に32文字のままにしておいても問題はないが短くしたいな。と思って調査。
まずはEC-CUBEの会員登録画面を覗いて【半角英数記号】でgrepしてみる。

/src/Eccube/Form/Type/RepeatedPasswordType.php

#64行目
            'first_options' => array(
                'attr' => array(
                    'placeholder' => '半角英数字記号'.$this->config['password_min_len'].'~'.$this->config['password_max_len'].'文字',
                ),
            ),

あったあった、$this->config['password_max_len']って言う変数に入ってると。
じゃあ、この変数はと探してみると

/src/Eccube/Form/Type/RepeatedPasswordType.php

#36行目
public function __construct($config = array('password_min_len' => 8, 'password_max_len' => '32'))

平文で持ってるのね。。。と言う事でこの文字列を変更してみる。
効かない。

どうやら、この変数ではなく他の変数に依存しているのかと調査。
password_min_lenをgrepすると

/src/Eccube/Resource/config/constant.yml.dist

#159行目
password_max_len: 32

この行を

#159行目
password_max_len: 16

に変更すると、placeholderに入っていた文字が 半角英数字記号8~16文字 に変更されている事を確認。

ただこれだけだとplaceholderの文字列だけが変わっていて入力制限は入っていない。と言う訳で入力制限のmaxlengthを追加する。

/src/Eccube/Form/Type/RepeatedPasswordType.php

#64行目
            'first_options' => array(
                'attr' => array(
                    'placeholder' => '半角英数字記号'.$this->config['password_min_len'].'~'.$this->config['password_max_len'].'文字',
                ),
            ),
            'second_options' => array(
                'attr' => array(
                    'placeholder' => 'form.member.repeated.confirm',
                ),
            ),

上記を

#64行目
            'first_options' => array(
                'attr' => array(
                    'placeholder' => '半角英数字記号'.$this->config['password_min_len'].'~'.$this->config['password_max_len'].'文字',
                    'maxlength' => 16,
                ),
            ),
            'second_options' => array(
                'attr' => array(
                    'placeholder' => 'form.member.repeated.confirm',
                    'maxlength' => 16,
                ),
            ),

maxlengthの要素を足して、キャッシュを消して入力すると16文字以上はタイプ出来ない事を確認。
これで入力制限自体は問題ないかな。と。