弊社は他社でカスタマイズされた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オープンプラットフォーム「EC-CUBE」 EC-CUBEゴールドパートナー EC-CUBEは株式会社イーシーキューブの商標です

EC-CUBEに関するお問い合わせ


    [重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。

    EC-CUBEバージョンアップ