質問 > フロント機能 > 問い合わせフォームのカスタマイズの質問 |
フロント機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
k-naka |
投稿日時: 2020/5/17 15:32
対応状況: −−−
|
新米 登録日: 2020/5/17 居住地: 投稿: 9 |
問い合わせフォームのカスタマイズの質問 ec-cube4でトップページに問い合わせフォームを設置したいのですがどのようにしたらよいかわからないでいます。
設置するフォームはデフォルトのcontactフォルダの中にあるフォームです。 色々ネットで調べてみましたが、良い情報が見当たらいませんでした。 ec-cube4初心者で申し訳ありませんが、わかる方ご教示のほど何卒宜しくお願い致します。 |
468 |
投稿日時: 2020/5/18 8:58
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: 問い合わせフォームのカスタマイズの質問 問い合わせページに関連するファイルは以下のファイルになりますので
これらを参考に作業を進めていくのが良いかと思います。 /src/Eccube/Controller/ContactController.php /src/Eccube/Form/Type/Front/ContactType.php /src/Eccube/Resource/template/default/Contact/index.twig /src/Eccube/Resource/template/default/Contact/confirm.twig /src/Eccube/Resource/template/default/Contact/complete.twig トップページは /src/Eccube/Controller/TopController.php で単純にtwigを表示しているだけですので ここにContactController.phpのfunction index()で行われている formの準備、リクエスト受付時の処理(確認画面、完了画面の遷移、メール送信)を組み込む事になるかと思います。
|
k-naka |
投稿日時: 2020/5/19 23:48
対応状況: −−−
|
新米 登録日: 2020/5/17 居住地: 投稿: 9 |
Re: 問い合わせフォームのカスタマイズの質問 468様
投稿ありがとうございました。 お手数ですが質問です。 TopController.phpにContactController.phpのfunction index()で行われている formの準備、リクエスト受付時の処理(確認画面、完了画面の遷移、メール送信)を組み込む、とありましたので以下のようにやってみたのですが、トップページが表示されなくなります。 <?php /* * This file is part of EC-CUBE * * Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved. * * http://www.ec-cube.co.jp/ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Eccube\Controller; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; use Symfony\Component\Routing\Annotation\Route; class TopController extends AbstractController { protected $mailService; /** * @Route("/", name="homepage") * @Template("index.twig") */ public function index( MailService $mailService) { $this->mailService = $mailService; } public function index(Request $request) { $builder = $this->formFactory->createBuilder(ContactType::class); if ($this->isGranted('ROLE_USER')) { /** @var Customer $user */ $user = $this->getUser(); $builder->setData( [ 'name01' => $user->getName01(), 'name02' => $user->getName02(), 'kana01' => $user->getKana01(), 'kana02' => $user->getKana02(), 'postal_code' => $user->getPostalCode(), 'pref' => $user->getPref(), 'addr01' => $user->getAddr01(), 'addr02' => $user->getAddr02(), 'phone_number' => $user->getPhoneNumber(), 'email' => $user->getEmail(), ] ); } // FRONT_CONTACT_INDEX_INITIALIZE $event = new EventArgs( [ 'builder' => $builder, ], $request ); $this->eventDispatcher->dispatch(EccubeEvents::FRONT_CONTACT_INDEX_INITIALIZE, $event); $form = $builder->getForm(); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { switch ($request->get('mode')) { case 'confirm': $form = $builder->getForm(); $form->handleRequest($request); return $this->render('Contact/confirm.twig', [ 'form' => $form->createView(), ]); case 'complete': $data = $form->getData(); $event = new EventArgs( [ 'form' => $form, 'data' => $data, ], $request ); $this->eventDispatcher->dispatch(EccubeEvents::FRONT_CONTACT_INDEX_COMPLETE, $event); $data = $event->getArgument('data'); // メール送信 $this->mailService->sendContactMail($data); return $this->redirect($this->generateUrl('contact_complete')); } } return [ 'form' => $form->createView(), ]; } public function complete() { return []; } } 組み込むとは具体的にどのようにしたらよいのでしょうか? お手数ですが、もしお時間ございましたらご教示ください。 宜しくお願い致します。 |
468 |
投稿日時: 2020/5/20 8:10
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: 問い合わせフォームのカスタマイズの質問 >組み込むとは具体的にどのようにしたらよいのでしょうか?
TopController.phpにContactController.phpを参考にしながら プログラムを追記するという意味です。 なので作業されている内容は間違っていないと思います。 ただ、細かいプログラムの書き方については きちんと動作するようにしていく必要があります。 張り付けられたコードを見ると、function index()が2つ定義されているみたいですが 1つは public function __construct() の誤りではないでしょうか? 投稿時に打ち間違えたのであれば、他にエラーの原因があると思いますが 打ち間違えでないのであれば、function index()の定義の重複がエラーの原因の一つかと思います。 トップページが表示されなくなるというのはシステムエラーのメッセージが表示されるのでしょうか? それとも500 internal server errorが表示されるような形でしょうか? プログラムの記述ミス等もあるかと思いますので そういった場合はデバッグモードを利用する、エラーログを確認して 一度、原因となりそうな箇所を調査されたほうが効率的かと思います。 慣れてくると、何となくどこがおかしいか見えてくると思います。
|
k-naka |
投稿日時: 2020/5/21 2:30
対応状況: −−−
|
新米 登録日: 2020/5/17 居住地: 投稿: 9 |
Re: 問い合わせフォームのカスタマイズの質問 468様
ご返答ありがとうございます、本当に感謝いたします。 エラーはシステムエラーです。 ご連絡いただいた通りでバックシステムを起動させました、そうしましたら以下のエラーが出ました (例外)コントローラ "Eccube \ Controller \ TopController :: __ construct()"では、 "$ mailService"引数に値を指定する必要があります。引数がNULL可能であり、NULL値が指定されていないか、デフォルト値が指定されていないか、またはこの引数の後にオプションの引数がないためです。 (ログ) ①RuntimeException:コントローラ "Eccube \ Controller \ TopController :: __ construct()"では、 "$ mailService"引数に値を指定する必要があります。引数がNULL可能であり、NULL値が指定されていないか、デフォルト値が指定されていないか、またはこの引数の後にオプションの引数がないためです。(キャッチされない例外)/usr/home/ai124jc3fr/html/ando/vendor/symfony/http-kernel/Controller/ArgumentResolver.php 78行 ②キャッチされないPHP例外RuntimeException: "Controller" Eccube \ Controller \ TopController :: __ construct() "では、" $ mailService "引数に値を指定する必要があります。引数がnull可能で、null値が指定されていないか、デフォルト値がありません提供されているか、このオプションの後にオプションの引数がないためです。」/usr/home/ai124jc3fr/html/ando/vendor/symfony/http-kernel/Controller/ArgumentResolver.phpの78行目 (スタックトレース) RuntimeException: コントローラ "Eccube \ Controller \ TopController :: __ construct()"では、 "$ mailService"引数に値を指定する必要があります。引数がNULL可能であり、NULL値が指定されていないか、デフォルト値が指定されていないか、またはこの引数の後にオプションの引数がないためです。 /usr/home/ai124jc3fr/html/ando/vendor/symfony/http-kernel/Controller/ArgumentResolver.php:78にあります Symfony \ Component \ HttpKernel \ Controller \ ArgumentResolver-> getArguments(object(Request)、array(object(TopController)、 '__construct'))にあります (/usr/home/ai124jc3fr/html/ando/vendor/symfony/http-kernel/Controller/TraceableArgumentResolver.php:38) Symfony \ Component \ HttpKernel \ Controller \ TraceableArgumentResolver-> getArguments(object(Request)、array(object(TopController)、 '__construct'))にあります (/usr/home/ai124jc3fr/html/ando/vendor/symfony/http-kernel/HttpKernel.php:143) Symfony \ Component \ HttpKernel \ HttpKernel-> handleRaw(object(Request)、1)で (/usr/home/ai124jc3fr/html/ando/vendor/symfony/http-kernel/HttpKernel.php:68) Symfony \ Component \ HttpKernel \ HttpKernel-> handle(object(Request)、1、true)に (/usr/home/ai124jc3fr/html/ando/vendor/symfony/http-kernel/Kernel.php:200) Symfony \ Component \ HttpKernel \ Kernel-> handle(object(Request))に (/usr/home/ai124jc3fr/html/ando/index.php:76) 以上です。 ここまではたどり着けたのですが、具体的にどのようにしたらよいかがわかりません。 もしお時間がありましたらご教示いただけますと幸いです。 何卒宜しくお願い致します。 |
468 |
投稿日時: 2020/5/21 9:20
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: 問い合わせフォームのカスタマイズの質問 エラーメッセージには__ constructの事について書いてあるかと思います。
前回の投稿でも指摘した箇所ですがソースの以下の部分でfunction index()がダブって記述されています。
MailServiceクラスは__ constructで渡す必要がありますので indexの記述とは切り離して以下のように記述します。 (ContactController.phpは以下のようになっていると思います)
あと、useの記述が不足しているように見えますので TopController.phpの以下の部分を ContactController.phpのuseの記述で上書きしたほうが良いと思います。
↓
|
k-naka |
投稿日時: 2020/5/23 3:13
対応状況: 解決済
|
新米 登録日: 2020/5/17 居住地: 投稿: 9 |
Re: 問い合わせフォームのカスタマイズの質問 468様
ご返答ありがとうございます。 無事フォームの設置ができました、本当にありがとうございました。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |