質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.99%

[EC-CUBE4] パラメータの付与

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,998

nelo

score 7

EC-CUBE4にて、新規作成(管理画面→コンテンツ管理→ページ管理)で作成したページに

コントローラ側から新規ページにパラメータを付与できず、

このようなエラーになります。

イメージ説明

ソースコード
[SamplePageController.php]

namespace Customize\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Eccube\Controller\AbstractController;
use Eccube\Entity\Product;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

class SamplePageController extends AbstractController
{
    /**
     * @Method("GET")
     * @Route("/user_data/sample")
     * @Template("sample.twig")
     */

    public function SamplePage()
    {
      //カテゴリページの取得の処理
        $Categories = $this->entityManager->getRepository('Eccube\Entity\Category')->getList();

        //サンプル画像表示処理
        /** @var Product $product */
        $product = $this->entityManager->getRepository('Eccube\Entity\Product')->find(1);
        $image = $product->getProductImage();
        $images = [];

        foreach ($image as $ProductImage) {
            $images[] = $ProductImage->getFileName();
        }
        return  [
          'image' => $images,
          'Category' => $Categories,
        ];
    }
}


[sample.twig]

{% extends 'default_frame.twig' %}
{% block main %}

<div id="container">

  <div id="boxA">
    <h3>サンプル開発</h3>

  </div>

  <div id="wrapper">

    <div id="boxB">

      <div class="item_visual">
        {% for ProductImage in image %}
          <div class="slide-item"><img src="{{ asset(ProductImage, 'save_image') }}"></div>
        {% else %}
          <div class="slide-item"><img src="{{ asset(''|no_image_product, 'save_image') }}"/></div>
        {% endfor %}
      </div>
    </div>

    <div id="boxC">
      C(サイドバー1)
    </div>
</div>

  <div id="boxD">

    {% macro tree(Category) %}

      {% from _self import tree %}
      <a href="{{ url('category', { Category_id : Category.id }) }}">

        {{ Category.name }}
        {# {% set size = Category.children | length %} ({{(size)}})#}
      </a>

    {% endmacro %}

    {% from _self import tree %}

    <div class="ec-cateoryNaviRole">
      <div class="ec-itemNav">
        <ul class="ec-itemNav__nav">
          {% for Category in Category %}
            <li>
              {{ tree(Category) }}
            </li>
          {% endfor %}
        </ul>
      </div>
    </div>

  </div>

  <div id="boxE">
    E(フッタ)
  </div>

</div>

</body>
</html>

{% endblock %}

[新規ページ]
イメージ説明

[スタックトレース]

Twig_Error_Runtime:
Variable "image" does not exist.

  at /var/www/html/ec-cube/app/template/default/sample.twig:57
  at __TwigTemplate_ad36445279859ce375110b80239150907458d5d1cbf6b17a0909e7c4c114797c->{closure}()
     (/var/www/html/ec-cube/var/cache/dev/twig/de/dea9f2defaabe5bdeea9f0f42cbcc2419590e7e192caa9f9f85a46c25a53d9c3.php:110)
  at __TwigTemplate_ad36445279859ce375110b80239150907458d5d1cbf6b17a0909e7c4c114797c->block_main(array('app' => object(AppVariable), 'BaseInfo' => object(BaseInfo), 'eccube_config' => object(EccubeConfig), 'Layout' => object(Layout), 'Page' => object(Page), 'title' => 'サンプル', 'layoutRoleMain' => 'ec-layoutRole__mainWithColumn', '_parent' => array('app' => object(AppVariable), 'BaseInfo' => object(BaseInfo), 'eccube_config' => object(EccubeConfig), 'Layout' => object(Layout), 'Page' => object(Page), 'title' => 'サンプル', 'layoutRoleMain' => 'ec-layoutRole__mainWithColumn')), array('stylesheet' => array(object(__TwigTemplate_7c4ba192c1521dd7412ec57bb202dfc0b6e32de0d4a8d051a98ae7739e09d734), 'block_stylesheet'), 'main' => array(object(__TwigTemplate_ad36445279859ce375110b80239150907458d5d1cbf6b17a0909e7c4c114797c), 'block_main'), 'javascript' => array(object(__TwigTemplate_7c4ba192c1521dd7412ec57bb202dfc0b6e32de0d4a8d051a98ae7739e09d734), 'block_javascript')))
     (/var/www/html/ec-cube/vendor/twig/twig/lib/Twig/Template.php:189)
  at Twig_Template->displayBlock('main', array('app' => object(AppVariable), 'BaseInfo' => object(BaseInfo), 'eccube_config' => object(EccubeConfig), 'Layout' => object(Layout), 'Page' => object(Page), 'title' => 'サンプル', 'layoutRoleMain' => 'ec-layoutRole__mainWithColumn'), array('stylesheet' => array(object(__TwigTemplate_7c4ba192c1521dd7412ec57bb202dfc0b6e32de0d4a8d051a98ae7739e09d734), 'block_stylesheet'), 'main' => array(object(__TwigTemplate_ad36445279859ce375110b80239150907458d5d1cbf6b17a0909e7c4c114797c), 'block_main'), 'javascript' => array(object(__TwigTemplate_7c4ba192c1521dd7412ec57bb202dfc0b6e32de0d4a8d051a98ae7739e09d734), 'block_javascript')))
     (/var/www/html/ec-cube/var/cache/dev/twig/8a/8a236ec8c9fb9ede1f2e710f3c0877ec3724c9de9cdbede7fc6f0d451c21f9e1.php:255)
  at __TwigTemplate_7c4ba192c1521dd7412ec57bb202dfc0b6e32de0d4a8d051a98ae7739e09d734->doDisplay(array('app' => object(AppVariable), 'BaseInfo' => object(BaseInfo), 'eccube_config' => object(EccubeConfig), 'Layout' => object(Layout), 'Page' => object(Page), 'title' => 'サンプル', 'layoutRoleMain' => 'ec-layoutRole__mainWithColumn'), array('stylesheet' => array(object(__TwigTemplate_7c4ba192c1521dd7412ec57bb202dfc0b6e32de0d4a8d051a98ae7739e09d734), 'block_stylesheet'), 'main' => array(object(__TwigTemplate_ad36445279859ce375110b80239150907458d5d1cbf6b17a0909e7c4c114797c), 'block_main'), 'javascript' => array(object(__TwigTemplate_7c4ba192c1521dd7412ec57bb202dfc0b6e32de0d4a8d051a98ae7739e09d734), 'block_javascript')))
     (/var/www/html/ec-cube/vendor/twig/twig/lib/Twig/Template.php:390)
  at Twig_Template->displayWithErrorHandling(array('app' => object(AppVariable), 'BaseInfo' => object(BaseInfo), 'eccube_config' => object(EccubeConfig), 'Layout' => object(Layout), 'Page' => object(Page), 'title' => 'サンプル'), array('stylesheet' => array(object(__TwigTemplate_7c4ba192c1521dd7412ec57bb202dfc0b6e32de0d4a8d051a98ae7739e09d734), 'block_stylesheet'), 'main' => array(object(__TwigTemplate_ad36445279859ce375110b80239150907458d5d1cbf6b17a0909e7c4c114797c), 'block_main'), 'javascript' => array(object(__TwigTemplate_7c4ba192c1521dd7412ec57bb202dfc0b6e32de0d4a8d051a98ae7739e09d734), 'block_javascript')))
     (/var/www/html/ec-cube/vendor/twig/twig/lib/Twig/Template.php:367)
  at Twig_Template->display(array('app' => object(AppVariable), 'BaseInfo' => object(BaseInfo), 'eccube_config' => object(EccubeConfig), 'Layout' => object(Layout), 'Page' => object(Page), 'title' => 'サンプル'), array('main' => array(object(__TwigTemplate_ad36445279859ce375110b80239150907458d5d1cbf6b17a0909e7c4c114797c), 'block_main')))
     (/var/www/html/ec-cube/var/cache/dev/twig/de/dea9f2defaabe5bdeea9f0f42cbcc2419590e7e192caa9f9f85a46c25a53d9c3.php:34)
  at __TwigTemplate_ad36445279859ce375110b80239150907458d5d1cbf6b17a0909e7c4c114797c->doDisplay(array('app' => object(AppVariable), 'BaseInfo' => object(BaseInfo), 'eccube_config' => object(EccubeConfig), 'Layout' => object(Layout), 'Page' => object(Page), 'title' => 'サンプル'), array('main' => array(object(__TwigTemplate_ad36445279859ce375110b80239150907458d5d1cbf6b17a0909e7c4c114797c), 'block_main')))
     (/var/www/html/ec-cube/vendor/twig/twig/lib/Twig/Template.php:390)
  at Twig_Template->displayWithErrorHandling(array('app' => object(AppVariable), 'BaseInfo' => object(BaseInfo), 'eccube_config' => object(EccubeConfig), 'Layout' => object(Layout), 'Page' => object(Page), 'title' => 'サンプル'), array('main' => array(object(__TwigTemplate_ad36445279859ce375110b80239150907458d5d1cbf6b17a0909e7c4c114797c), 'block_main')))
     (/var/www/html/ec-cube/vendor/twig/twig/lib/Twig/Template.php:367)
  at Twig_Template->display(array())
     (/var/www/html/ec-cube/vendor/twig/twig/lib/Twig/Template.php:375)
  at Twig_Template->render(array())
     (/var/www/html/ec-cube/vendor/symfony/twig-bridge/TwigEngine.php:49)
  at Symfony\Bridge\Twig\TwigEngine->render('@user_data/sample.twig', array())
     (/var/www/html/ec-cube/vendor/symfony/twig-bundle/TwigEngine.php:45)
  at Symfony\Bundle\TwigBundle\TwigEngine->render('@user_data/sample.twig', array())
     (/var/www/html/ec-cube/vendor/symfony/framework-bundle/Controller/ControllerTrait.php:284)
  at Symfony\Bundle\FrameworkBundle\Controller\Controller->render('@user_data/sample.twig')
     (Eccube/Controller/UserDataController.php:79)
  at Eccube\Controller\UserDataController->index(object(Request), 'sample')
     (/var/www/html/ec-cube/vendor/symfony/http-kernel/HttpKernel.php:151)
  at Symfony\Component\HttpKernel\HttpKernel->handleRaw(object(Request), 1)
     (/var/www/html/ec-cube/vendor/symfony/http-kernel/HttpKernel.php:68)
  at Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), 1, true)
     (/var/www/html/ec-cube/vendor/symfony/http-kernel/Kernel.php:200)
  at Symfony\Component\HttpKernel\Kernel->handle(object(Request))
     (/var/www/html/ec-cube/index.php:54)

新規で作成した(http://●●●/user_data/sample)にパラメータを付与させ、ブラウザ上で表示させたいのですが
どなたかわかる方いませんか?

手順が分かる方、どうかお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • asahina1979

    2018/10/05 16:48

    優先順位の変更が必要でしょうねそのURLを使う場合(設定ファイルをいじり倒すことになるだろうな)

    キャンセル

  • asahina1979

    2018/10/05 16:48

    先に登録されてるほうがかつ https://symfony.com/doc/current/routing.html

    キャンセル

  • nelo

    2018/10/05 17:37

    ありがとうございます。参考にさせていただきます。

    キャンセル

回答 2

checkベストアンサー

+1

こちらを参考にしてControllerとTwigを追加してみてください。

EC-CUBE4を動かしたことないのですが、たぶん
こっちのController(ルーティング)が優先されているんだと思います。
このControllerはTwigにimageを渡していないので、そのようなエラーが出ているのだと思います。
試しに当該Controllerでdump('hoge')等すればわかるかと。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/10/05 16:51

    回答ありがとうございました。問題解決いたしました。

    @Routeアノテーションをこのような形に変更いたしました。

    /**
    * @Method("GET")
    * @Route("/%eccube_user_data_route%/{route}", name="user_data", requirements={"route": "([0-9a-zA-Z_\-]+\/?)+(?<!\/)"})
    * @Template("sample.twig")
    */

    キャンセル

  • 2018/10/05 17:21

    ちなみにそれ他の /user_data/* も全て新規作成ページもそこへいくだろうな

    キャンセル

  • 2018/10/05 17:28

    行ってしまいました。

    キャンセル

  • 2018/10/05 20:10 編集

    回答した方法でダメな(今の手段にこだわっている)理由はあるんですか?
    紹介した方法はEC-CUBEのコアコードに影響を与えないようにカスタマイズするアプローチです。

    もしダメな場合は、EC-CUBEのコアコードに手を加える必要があるため、まずは紹介した方法で対応できないかご検討ください。

    キャンセル

0

新規作成したURLに合わせることで解決いたしました。

例 新規ページ「URL」http://●●●●/user_data/sample

controller 
/**

  • @Method("GET")
  • @Route("/sample", name="sample")
  • @Template("sample.twig")
    */

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.99%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる