バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > 問い合わせフォームのカスタマイズの質問

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
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の準備、リクエスト受付時の処理(確認画面、完了画面の遷移、メール送信)を組み込む事になるかと思います。


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

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が表示されるような形でしょうか?

プログラムの記述ミス等もあるかと思いますので
そういった場合はデバッグモードを利用する、エラーログを確認して
一度、原因となりそうな箇所を調査されたほうが効率的かと思います。

慣れてくると、何となくどこがおかしいか見えてくると思います。


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

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()がダブって記述されています。

/**
* @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);


MailServiceクラスは__ constructで渡す必要がありますので
indexの記述とは切り離して以下のように記述します。
(ContactController.phpは以下のようになっていると思います)

public function __construct(MailService $mailService)
{
    $this->mailService = $mailService;
}

/**
* @Route("/", name="homepage")
* @Template("index.twig")
*/
public function index(Request $request)
{
$builder = $this->formFactory->createBuilder(ContactType::class);


あと、useの記述が不足しているように見えますので
TopController.phpの以下の部分を
ContactController.phpのuseの記述で上書きしたほうが良いと思います。
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\Routing\Annotation\Route;


use Eccube\Entity\Customer;
use Eccube\Event\EccubeEvents;
use Eccube\Event\EventArgs;
use Eccube\Form\Type\Front\ContactType;
use Eccube\Service\MailService;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;


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

k-naka
投稿日時: 2020/5/23 3:13
対応状況: 解決済
新米
登録日: 2020/5/17
居住地:
投稿: 9
Re: 問い合わせフォームのカスタマイズの質問
468様

ご返答ありがとうございます。

無事フォームの設置ができました、本当にありがとうございました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1567
9
mcontact
1240
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.