phalcon3から5にバージョンアップした際のformの対応

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

そのほかのアップグレードで発生したエラー対応