バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

プラグイン > 開発について > 内部リダイレクトで一部しか表示されない

開発について

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
knaka
投稿日時: 2017/6/7 22:26
対応状況: −−−
新米
登録日: 2017/6/7
居住地:
投稿: 2
内部リダイレクトで一部しか表示されない
[EC-CUBE]3.0.14
[PHP]7.1.5
こんにちは。
プラグインから、読みやすいURLでアクセスできるようにカスタマイズしようとしています。
コントローラーを足して、内部リダイレクトで目的のページを表示させようとしています。

プラグインジェネレーターで作成した
プラグインのテンプレートのサービスプロバイダに
次のコードを足しました。

use Symfony\Component\HttpFoundation\Request;
//...
        // 独自コントローラー
        //...
        $front->match('/abc', function(Request $request) use ($app) {
                $subRequest = Request::create(
                        '/',
                        $request->getMethod(),
                        $request->request->all(),
                        $request->cookies->all(),
                        $request->files->all(),
                        $request->server->all()
                );
                $response = $app->handle($subRequest, HttpKernelInterface::SUB_REQUEST, false);
                return $response;
        })->bind('abc_alias');       

/abc にアクセスすると /にアクセスしたのと同じ画面を表示したいと思っています。
301や302でブラウザにリダイレクトを指示するのでは無くて、
そのURLでアクセスさせたいのです。

参考にしたのは次のサイトです。
https://coderwall.com/p/wmlx8g/silex-forward-requests

しかし、このコードで表示されるのは、本来表示されるはずの一部だけでした。具体的には#main_middleの中身だけで、
ほかの部分は表示されません。

直接/にアクセスした場合は、表示されています。

サブリクエストを作る作り方が悪いのか、
それとも入れ子でhandleを呼んではいけないのか、
どうか、ご教授下さい。

よろしくお願いします。
468
投稿日時: 2017/6/8 9:02
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: 内部リダイレクトで一部しか表示されない
記載されているフォワードリクエストの仕組みについては、あまり理解できていないのですが、
表示された結果から推測すると、
PageLayoutの情報(ヘッダーやフッターなど)が上手く取得されていないのではないかと思います。

URLを元に「dtb_page_layout」テーブルのレコードを取り出していると思われますので、
「dtb_page_layout」テーブルのレコードの/abcを追加するか、
「dtb_page_layout」テーブルのレコードを取り出す時の引数(デフォルトだとURL)を変更できれば、
きちんとした状態で表示されるのではないかと思いますが・・・。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

nyorai
投稿日時: 2017/6/8 10:14
対応状況: −−−
仙人
登録日: 2015/8/21
居住地:
投稿: 302
Re: 内部リダイレクトで一部しか表示されない
サブリクエストのやり方は問題無いと思います。

468さんの仰る通り、PageLayoutにデータがなく、ブロックが表示されていないだけかと思います。

ec-cube本体でも以下のようにデータ投入している箇所があるので参考にされてください。
https://github.com/EC-CUBE/ec-cube/blob/master/src/Eccube/Resource/doctrine/migration/Version20170225120000.php

※setUrlにはルーティング名を入れてください。ご提示いただいたコードだと「abc_alias」ですね。
knaka
投稿日時: 2017/6/10 9:36
対応状況: −−−
新米
登録日: 2017/6/7
居住地:
投稿: 2
Re: 内部リダイレクトで一部しか表示されない
468様、nyorai様、お返事ありがとうございます。
(新しい方のnyorai様のコメントへのお返事で続けさせていただきますので、よろしくお願いします)

頂いたアドバイスを参考に、元投稿のコードを次の様に変更したら、うまく表示されました。

        $front->match('/abc', function(Request $request) use ($app) {
                $subRequest = Request::create(
                        '/',
                        $request->getMethod(),
                        $request->request->all(),
                        $request->cookies->all(),
                        $request->files->all(),
                        $request->server->all()
                );

                $route = 'homepage';

                try {
                    $DeviceType = $app['eccube.repository.master.device_type']
                        ->find(\Eccube\Entity\Master\DeviceType::DEVICE_TYPE_PC);
                    $PageLayout = $app['eccube.repository.page_layout']->getByUrl($DeviceType, $route);
                } catch (\Doctrine\ORM\NoResultException $e) {
                    $PageLayout = $app['eccube.repository.page_layout']->newPageLayout($DeviceType);
                }

                $app['twig']->addGlobal('PageLayout', $PageLayout);
                $app['twig']->addGlobal('title', $PageLayout->getName());

                $response = $app->handle($subRequest, HttpKernelInterface::SUB_REQUEST, false);
                return $response;
        })->bind('abc_alias');

src/Eccube/Application.php のコードをコピペしただけですので
不格好ですが、この方向で上手く行きそうです。

お勧めいただいたdtb_page_layoutの変更はもうちょっと仕様が安定したらトライしてみます。

ありがとうございました。
nyorai
投稿日時: 2017/6/12 10:02
対応状況: −−−
仙人
登録日: 2015/8/21
居住地:
投稿: 302
Re: 内部リダイレクトで一部しか表示されない
そういえばこのやり方でも可能ですね。問題無いと思います。

※逆に勉強になりました。ありがとうございます。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

総メンバー数は88,684名です
総投稿数は109,930件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2311
5
umebius
2085
6
yuh
1819
7
h_tanaka
1638
8
red
1569
9
mcontact
1279
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
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.