弊社は他社でカスタマイズされたEC-CUBEサイトを途中から引き継ぐことも多いのですが、いざデバッグモードで開発を行おうとすると、標題のエラーImpossible to access an attributeが多発することがあります。
Impossible to access an attribute (“name01”) on a string variable (“anon.”).
name01の部分は、kana01だったりPrefだったりするのですが、この問題はapp.userをログイン判定せずに使用しているところにあります。
つまりログインユーザーの名前を表示するために{{ app.user.name01 }}とtwigで書いてしまっているのですが、ログインしていない場合app.userは”anon.“という文字列が入っている場合があり、そのname01プロパティが存在しないためエラーになります。
解決方法としてはtwigのis_granted関数を使用し、ログインしているかどうかを判定してから{{ app.user.name01 }}と記述することになります。
つまりapp.userを使用するときは下のコードのように書くようにしましょう。
{% if is_granted(‘ROLE_USER’) %}
{{ app.user.name01 }}
{% endif %}
このエラーImpossible to access an attributeは非デバッグモードでは起こらないため、気にせずに書いてしまう人もいるのが厄介なところです。
意外とこのルールを守っていないプラグインも存在し、デバッグモード開発の邪魔になることがよくあります。
EC-CUBEに関するお問い合わせ
[重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。