phalcon3から5にバージョンアップした際にページネーションで発生したエラー、Deprecated対応
unexpected token "=>", expecting ")"
syntax error, unexpected token "=>", expecting ")" #0 [internal function]: Phalcon\Mvc\View\Engine\Volt->render() #1 [internal function]: Phalcon\Mvc\View->engineRender() #2 [internal function]: Phalcon\Mvc\View->processRender() #3 [internal function]: Phalcon\Mvc\View->render() #4 {pathto}/public/index.php(30): Phalcon\Mvc\Application->handle() #5 {main}
voltのform()の引数が変わったためにエラー。
引数を配列で渡せばOK
before
{{ form('login', 'id': 'loginForm', 'class': 'bf_form', 'onbeforesubmit': 'return false') }}
after
{{ form(['action': 'login', 'id': 'loginForm', 'class': 'bf_form', 'onbeforesubmit': 'return false']) }}
ただしこのままだと出力されるActionが変わってしまいます。
https://{ドメイン}/xxxxx だったのが、ドメイン無しのxxxxxになります。
今まで通りのActionで出力したい場合は、url()かformLegacy()を使用。
url()を使う場合は、form()の関数名はそのままで、'action'のパラメータにurl()を使用
{{ form(['action': url('login'), 'id': 'loginForm', 'class': 'bf_form', 'onbeforesubmit': 'return false']) }}
formLegacy()を使う場合は、'action'のパラメータはそのままで、form()の関数名を変更
{{ formLegacy(['action': 'login', 'id': 'loginForm', 'class': 'bf_form', 'onbeforesubmit': 'return false']) }}
formLegacy()について
https://docs.phalcon.io/5.0/ja-jp/upgrade#volt
Validator\PresenceOf not found
Class "Phalcon\Validation\Validator\PresenceOf" not found
phalcon 5.0のバリデーションのマニュアルを見るとClassの場所が変わっていました。
なのでuse文を変更。
-use Phalcon\Validation\Validator\PresenceOf; +use Phalcon\Filter\Validation\Validator\PresenceOf;
Validator\Email not found
Class "Phalcon\Validation\Validator\Email" not found
PresenceOfと同様にClassの場所が変わっています。
use文を変更。
-use Phalcon\Validation\Validator\Email; +use Phalcon\Filter\Validation\Validator\Email;
基本的にPhalcon\ValidationはPhalcon\Filter\Validationに移動されているようです。
checkboxにデフォルトチェックがつかない
エラーログは出ていませんでしたが、checkboxにデフォルトチェックがついていませんでした。
input要素をレンダリングする際のcheckedオプションの指定方法が変わったようです。
デフォルトチェックをつける場合、checkedオプションに'checked'を設定していましたが、valueと同じ値を設定する必要があるようです。
-{{ form.render('category', ['value': categoryId, 'checked':(postCategoryId === categoryId) ? 'checked':null]) }} +{{ form.render('category', ['value': categoryId, 'checked':(postCategoryId === categoryId) ? categoryId:null]) }}
https://docs.phalcon.io/5.0/ja-jp/upgrade#phalconformselementcheck