バージョン選択

フォーラム

メニュー

オンライン状況

28 人のユーザが現在オンラインです。 (16 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 28
もっと...

サイト内検索

質問 > その他 > CustomizeディレクトリでControllerを追記したい

その他

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
mint_mi
投稿日時: 2024/1/24 19:51
対応状況: −−−
半人前
登録日: 2024/1/23
居住地:
投稿: 18
CustomizeディレクトリでControllerを追記したい
▼テンプレート
[EC-CUBE]4.2
[レンタルサーバ]ローカル
[OS] mac11.6
[PHP]8

[現象]
公式ドキュメント
https://doc4.ec-cube.net/customize_controller

app/Customize/Controller/ 配下にControllerファイルを配置すると上書きできるとのことだったので、実験的に下記のように書いてみました。

src/Eccube/Controller/TopController.php
namespace Eccube\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\Routing\Annotation\Route;

class TopController extends AbstractController
{
    /**
     * @Route("/", name="homepage", methods={"GET"})
     * @Template("index.twig")
     */
    public function index()
    {
        return ['name1' => 'EC-CUBE1'];
    }
}


app/Customize/Controller/TopController.php
namespace Customize\Controller;

use Eccube\Controller\AbstractController;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Response;

class TopController extends AbstractController
{
    /**
     * @Route("/", name="homepage", methods={"GET"})
     * @Template("index.twig")
     */
    public function index()
    {
        return ['name2' => 'EC-CUBE2'];
    }
}


app/template/templatename/index.twig
{% extends 'default_frame.twig' %}

{% set body_class = 'front_page' %}

{% block stylesheet %}

{% endblock %}

{% block javascript %}

{% endblock javascript %}

{% block main %}
    {{ name1 }}
    {{ name2 }}
{% endblock %}


結果は「Variable "name1" does not exist.」となってしまいます。

src/Eccube/Controller/TopController.phpのルーティングを、
app/Customize/Controller/TopController.phpで追加したいのですが(name1もname2も出力させたい)、
間違いをご指摘いただきたいです
tattsu
投稿日時: 2024/1/24 19:55
対応状況: −−−
一人前
登録日: 2023/12/23
居住地:
投稿: 140
Re: CustomizeディレクトリでControllerを追記したい
この書き方ですと
return ['name1' => 'EC-CUBE1', 'name2' => 'EC-CUBE2'];
としないと、配列にない要素はtwigに渡ってないですね。

ルーティングを上書きすると
src/Eccube/Controller/TopController.phpの方はなかったことになります。


----------------
-------------------
EC-CUBEカスタマイズご相談ください

mint_mi
投稿日時: 2024/1/24 20:05
対応状況: −−−
半人前
登録日: 2024/1/23
居住地:
投稿: 18
Re: CustomizeディレクトリでControllerを追記したい
tattsu様

ありがとうございます

追加させる方法はないのでしょうか?
app/Customize/Controller/TopController.phpのほうを
public function index2() としてみたりしてもどうにもならず

既存のControllerに追記するとき、みなさんはどうされているのか知りたいです
tattsu
投稿日時: 2024/1/24 20:39
対応状況: −−−
一人前
登録日: 2023/12/23
居住地:
投稿: 140
Re: CustomizeディレクトリでControllerを追記したい
私は本体直接修正すればいい派ですが、本体を修正しないと言う前提であれば・・・

twigにロジック書くのも気持ち悪いですがtwigに直接書くか、、TemplateEvent使うなど色々方法は考えられます。


----------------
-------------------
EC-CUBEカスタマイズご相談ください

mint_mi
投稿日時: 2024/1/24 20:59
対応状況: −−−
半人前
登録日: 2024/1/23
居住地:
投稿: 18
Re: CustomizeディレクトリでControllerを追記したい
tattsu様

ありがとうございます

やはり本体を修正した方が現実的なんでしょうね、、
TemplateEvent、まだよくわかっていないので調べて試してみようと思います
tattsu
投稿日時: 2024/1/25 8:17
対応状況: −−−
一人前
登録日: 2023/12/23
居住地:
投稿: 140
Re: CustomizeディレクトリでControllerを追記したい
>TemplateEvent

twigがレンダリングされる前に操作できるよう発行されているイベントです。
これはEC-CUBE独自の拡張機能です。調べてみてください。


----------------
-------------------
EC-CUBEカスタマイズご相談ください

sw_sn
投稿日時: 2024/1/25 11:57
対応状況: −−−
常連
登録日: 2018/5/25
居住地:
投稿: 49
Re: CustomizeディレクトリでControllerを追記したい
以下のコードのようにControllerを継承して、レスポンスに変数を追記する方法でいけると思います。

引用:

class TopController extends \Eccube\Controller\TopController
{
/**
* @Route("/", name="homepage", methods={"GET"})
* @Template("index.twig")
*/
public function index()
{
$res = parent::index();
$res['name2'] = 'EC-CUBE2';
return $res;
}
}
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は87,678名です
総投稿数は109,427件です

投稿数ランキング

1
seasoft
7362
2
468
3217
3
AMUAMU
2712
4
nanasess
2302
5
umebius
2085
6
yuh
1807
7
h_tanaka
1597
8
red
1567
9
mcontact
1196
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.