質問 > その他 > 【EC-CUBE4.0.3】twigとtwigMacroについて |
その他
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
katoasr |
投稿日時: 2020/2/6 13:44
対応状況: 解決済
|
半人前 登録日: 2020/1/30 居住地: 投稿: 11 |
【EC-CUBE4.0.3】twigとtwigMacroについて ▼テンプレート
[EC-CUBE] EC-CUBE4.0.3を新規インストール [レンタルサーバ]使用していない [OS] WIN10 pro [PHP] PHP7.2.26 [データベース] MySQL5.7 [WEBサーバ] httpd-2.4.39 [ブラウザ] Google Chrome [導入プラグインの有無] 無 [カスタマイズの有無] EC-CUBE 4.0 でtwigとtwigのマクロを追加してみました [現象] SampleController.phpのfunction index()で配列をindex.twigに渡して表示ようとしています。 http://localhost/sample/indexにアクセスするとRuntimeErrorとなり、HTTP 500 Internal Server Error Impossible to access an attribute ("id") on a integer variable ("1") in __string_template__ dbb243f2e991d8deb318a1724bc15d531391fc06135417c4666be3e5760536f4 at line 3. とエラーが表示されます。キャッシュ管理からキャッシュ削除を実施してもエラー内容は変わりませんでした。 なにか指摘があれば教えてください。 SampleController.phpは下記になります。 <?php namespace Customize\Controller; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Request; use \Datetime; class SampleController { /** * @Method("GET") * @Route("/sample/index", name="sample") * @Template("Sample/index.twig") */ public function index() { $Categorise = [ ["id" => 1, "name" => "suzuki", "children" => array("id" => 1,"name" => "taro")], ["id" => 2, "name" => "satou", "children" => array()] ]; return ["Categorise" => $Categorise]; } } index.twigは以下になります。 {% macro tree(Category) %} {% from _self import tree %} <a herf="{{url('product_list')}}?category_id={{ Category.id}}"> {{ Category.name}} </a> {% if Category.children|length>0 %} {{dump(Category.children|length)}} <ul> {{dump(Category.children)}} {% for ChildCategory in Category.children %} {{dump(ChildCategory)}} <li>{{tree(ChildCategory)}}</li> {% endfor %} </ul> {% endif %} {% endmacro%} {% from _self import tree%} <div class='ec-CategoryNaviRole'> <div class='ec-itemNav'> <ul class="ec-itemNav__nav"> {% for Category in Categorise %} <li> {{tree(Category)}} </li> {% endfor%} </ul> </div> </div> |
tsuji |
投稿日時: 2020/2/7 9:39
対応状況: −−−
|
仙人 登録日: 2013/11/19 居住地: 投稿: 958 |
Re: 【EC-CUBE4.0.3】twigとtwigMacroについて katoasr 様
以下のコードを
以下のように変えるか、コメントアウトすると動くように思います。
実装して動かしたわけではないですが、 ChildCategory in Category.childrenで 「ChildCategory」に入るものは、idやnameの中身かと思います。 それで、tree内に入るとidの中身(1)に対してidを参照することになるかと思います。
|
katoasr |
投稿日時: 2020/2/7 21:45
対応状況: −−−
|
半人前 登録日: 2020/1/30 居住地: 投稿: 11 |
Re: 【EC-CUBE4.0.3】twigとtwigMacroについて tsuji様
回答ありがとうございます。 ご指摘いただいた箇所を修正して試しました。 ご指摘いただいた箇所をコメントアウトすれば動きました。 ご指摘いただいた箇所を{{tree(Category.children)}}に修正すると下記のエラーメッセージがでました。 Key "children" for array with keys "id, name" does not exist in __string_template__078dd8f837f68751123bf23bd9477b2ab0c382ded78f8c99f0f3134ab92dd434 at line 6. twig上でdumpを試みた結果、 ChildCategoryの中身は下記のように配列が渡されることを想定していましたが、 array:2 [ "id" => 1 "name" => "taro" ] dumpしてみると配列ではなく配列の中身が個別にChildCategoryに渡されていました。 {{dump(ChildCategory)}}の出力 1 "taro" このため、idにアクセスできないとエラーが出力されていると思いました。 助言していただきありがとうございます。 |
katoasr |
投稿日時: 2020/2/8 0:30
対応状況: 解決済
|
半人前 登録日: 2020/1/30 居住地: 投稿: 11 |
Re: 【EC-CUBE4.0.3】twigとtwigMacroについて tsuji様
ご助言頂いている意味が理解できました。 dumpの結果から tsuji様の考え通りの挙動で、ご指摘の通り {{tree(Category.children)}}することがわかりました。 ご指摘の通り今のままでは「idやnameの中身」がChildCategoryになるからです。 ご助言をようやく理解した上で、修正して実行すると Key "children" for array with keys "id, name" does not exist in __string_template__078dd8f837f68751123bf23bd9477b2ab0c382ded78f8c99f0f3134ab92dd434 at line 6. 上記のようなエラーがでました。 {{dump(Category.children)}}にすれば array:2 [▼ "id" => 1 "name" => "taro" ] が表示されたので上書きで{{tree(Category.children)}}としたのですが前述のエラーになりました。 もし、なにか思い当たることがあればよろしくお願いいたします。 コントローラー側を class SampleController { /** * @Method("GET") * @Route("/sample/index", name="sample") * @Template("Sample/index.twig") */ public function index() { $Categorise = [ ["id" => 1, "name" => "suzuki", "children" =>["id" => 1,"name" => "taro","children"=>[]]], ["id" => 2, "name" => "satou", "children" => []] ]; return ["Categorise" => $Categorise]; } } twig側を {% macro tree(Category) %} {% from _self import tree %} <a herf="http://localhost?category_id={{ Category.id}}"> {{ Category.name}} </a> {% if Category.children|length>0 %} <ul> {{tree(Category.children)}} </ul> {% endif %} {% endmacro%} {% from _self import tree %} <div class='ec-CategoryNaviRole'> <div class='ec-itemNav'> <ul class="ec-itemNav__nav"> {% for Category in Categorise %} <li> {{tree(Category)}} </li> {% endfor%} </ul> </div> </div> とすることで解決しました。 tsuji様 アドバイスありがとうございました。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |