MAMP 環境にインストールした Craft CMS で、Matrix フィールドを保存すると途中のブロック以降の設定内容が欠損することが稀にありました。しかも、その時点でデータベースの該当カラムも削除されてしまう、なかなか怖い状況です。
ある程度複雑なブロック構成の場合に限ることは理解しつつも再現条件に確信が持てず放置していたのですが、たまたま解決方法を知る機会があったので、備忘録としてまとめます。
そもそもの原因は?
結論から言うと max_input_vars
のデフォルト値よりも Matrix フィールドの編集画面から POST する入力項目数が多いことが原因でした。そのため、上限を超えた項目は切り捨てられ、結果的に保存されるデータが欠損していたようです。
PHP: 実行時設定 - Manual
http://php.net/manual/ja/info.configuration.php
PHP 5.3.9 以降はデフォルトで上限 1,000
らしいのですが、それでも足りないのは少し意外でした。
MAMP PRO の php.ini を調整
メニューバーの File > Edit Template > PHP(php.ini) > 7.1.8
から php.ini
を開き、任意の箇所に以下の1行を追加します。
max_input_vars = 10000
ファイルを保存して閉じると MAMP PRO のメインウィンドウにポップアップが表示されますので、指示通りサーバーを再起動すれば完了です。
なお、MAMP 本体のアップデートに伴い PHP のバージョンが新しくなった際は、都度再設定が必要な点だけ注意ですね。
余談
Stack Exchange によると post_max_size
が原因になる場合もあるようですので、ご参考まで。
Is there a maximum number of fields in a single matrix? - Craft CMS Stack Exchange
https://craftcms.stackexchange.com/questions/12497/is-there-a-maximum-number-of-fields-in-a-single-matrix