質問 > 管理機能 > dtb_memberテーブルに項目追加 |
管理機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
start |
投稿日時: 2020/7/11 13:59
対応状況: 開発中
|
一人前 登録日: 2017/11/9 居住地: 投稿: 109 |
dtb_memberテーブルに項目追加 dtb_mebmerテーブルに項目追加する必要なので手動でDBに直接項目追加して、scr配下の対象Entity(Member), Form(MemberType.php), View(member_edit.twig)で対象項目を追加して試したら問題なしで動いています。今後バーションアップする為にsrc配下に直接修正ダメのでapp/Customizeの配下にEntity, Repository, Form, Viewを元のファイルをコピーして今回の追加する項目を追加して確認したら下記のエラーが発生して困っています。
Neither the property "Test" nor one of the methods "Test()", "getTest()"/"isTest()"/"hasTest()" or "__call()" exist and have public access in class ※src配下のファイルを全て元に戻しました。 ▼テンプレート [EC-CUBE] EC-CUBEのバージョン、新規インストールかアップデートか、等 [レンタルサーバ] レンタルサーバ名 [OS] 使用しているOS名、バージョン [PHP] 使用しているPHPのバージョン [データベース] 使用しているDB名、バージョン [WEBサーバ] 使用しているWEBサーバ名、バージョン [ブラウザ] 使用しているブラウザ名、バージョン [導入プラグインの有無] あれば導入プラグインを記載 [カスタマイズの有無] あればカスタマイズ内容を記載(できるだけ具体的に) [現象] 再現手順や、どのような現象が発生しているかなど、具体的に |
umebius |
投稿日時: 2020/7/11 14:39
対応状況: −−−
|
神 登録日: 2016/7/22 居住地: 投稿: 2085 |
Re: dtb_memberテーブルに項目追加 エラーメッセージのhave public access in classに続くのは「"Eccube\Entity\Member"」ですかね
Proxyである app/proxy/entity/src/Eccube/Entity/Member.php は存在していますでしょうか? 存在しなければドキュメントを参考にProxy クラスを生成してみてください。 https://doc4.ec-cube.net/customize_entity#entity%E6%8B%A1%E5%BC%B5-2267
|
start |
投稿日時: 2020/7/11 17:12
対応状況: −−−
|
一人前 登録日: 2017/11/9 居住地: 投稿: 109 |
Re: dtb_memberテーブルに項目追加 お返事ありがとうございました。
proxyを生成しても同じでした。私の作業流れを軽く説明致します。 1. app/Customize/Entity/MemberTrait.php を作成 2. proxy 生成 bin/console eccube:generate:proxies 3. app/Customize/Repository/MemberRepository.php を元のファイルから作成して、namespaceを変更(namespace Customize\Repository;)またはuse Eccube\Repository\AbstractRepository;を追加した。 4. app/Customize/Form/Type/Admin/MemberType.phpを元のファイルから作成して、namespaceを変更、use Customize\Entity\Company; use Customize\Repository\CompanyRepository;を追加して、 ->add('company', EntityType::class, [ 'class' => Company::class, 'required' => false, ]); 5. app/template/admin/Setting/System/member_edit.twig に {{ form_widget(form.company) }} {{ form_errors(form.company) }}したら下記のエラー発生しています。エラー内容は最初のエラーと同じです。 エラー内容:Neither the property "company" nor one of the methods "company()", "getcompany()"/"iscompany()"/"hascompany()" or "__call()" exist and have public access in class "Symfony\Component\Form\FormView" in __string_template__96c42d43d963842ad6a198a59cb1e9bf9e16ea872a8add173a168f8d08aab775 at line 138. ※ MemberTrait.phpの中身: <?php namespace Customize\Entity; use Doctrine\ORM\Mapping as ORM; use Eccube\Annotation\EntityExtension; use Symfony\Component\Validator\Constraints as Assert; /** * @EntityExtension("Eccube\Entity\Member") */ trait MemberTrait { /** * @var \Customize\Entity\Company * * @ORM\ManyToOne(targetEntity="Customize\Entity\Company") * @ORM\JoinColumns({ * @ORM\JoinColumn(name="company_id", referencedColumnName="id") * }) */ private $Company; /** * Set company. * * @param \Customize\Entity\Company|null $company * * @return Member */ public function setCompany(\Customize\Entity\Company $company = null) { $this->Company = $company; return $this; } /** * Get company. * * @return \Customize\Entity\Company|null */ public function getCompany() { return $this->Company; } } です。 |
umebius |
投稿日時: 2020/7/11 17:18
対応状況: −−−
|
神 登録日: 2016/7/22 居住地: 投稿: 2085 |
Re: dtb_memberテーブルに項目追加 引用:
Neither the property "company" nor one of the methods "company()", "getcompany()"/"iscompany()"/"hascompany()" or "__call()" exist and have public access in class "Symfony\Component\Form\FormView" なるほど、このエラー内容であれば確かにproxyの問題ではないですね。 問題はformにcompanyというプロパティが存在しないことです。 拝見したところ、Controllerについては修正されていないようですので、 formオブジェクトがapp/Customize/Form/Type/Admin/MemberType.phpのクラスではなく src/Eccube/Form/Type/Admin/MemberType.phpが使用されているのではないでしょうか? 対応は下記のどちらかですがこのケースであれば通常は1が簡単と思います。 1. FormExtensionでMemberTypeを拡張する https://doc4.ec-cube.net/customize_formtype 2. ControllerもCustomizeにコピーして フォームのクラスをapp/Customize/Form/Type/Admin/MemberType.phpに変更する
|
start |
投稿日時: 2020/7/11 20:26
対応状況: 開発中
|
一人前 登録日: 2017/11/9 居住地: 投稿: 109 |
Re: dtb_memberテーブルに項目追加 お返事ありがとうございました。
app/Customizeの配下にあるMemberType.php, MemberRepository.phpを削除しました。 MemberTrait.phpはそのままです。 教えて頂いてようapp/Customize/Form/Extension/MemberTypeExtension.phpファイルを作成しました。中身は: <?php namespace Customize\Form\Extension; use Eccube\Form\Type\Admin\MemberType; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\AbstractTypeExtension; use Symfony\Component\Validator\Constraints\NotBlank; use Customize\Entity\Company; class MemberTypeExtension extends AbstractTypeExtension { /** * {@inheritdoc} */ public function buildForm(FormBuilderInterface $builder, array $options) { $options = $builder->get('Company')->getOptions(); $options['required'] = true; $options['constraints'] = [ new NotBlank() ]; $options['attr']['placeholder'] = '会社名'; $builder->add('Company', Company::class, $options); } /** * {@inheritdoc} */ public function getExtendedType() { return MemberType::class; } } ですがエラーが発生しています。エラー内容は: The child with the name "Company" does not exist.です。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー ここに発生しています。$options = $builder->get('Company')->getOptions(); |
umebius |
投稿日時: 2020/7/11 23:43
対応状況: −−−
|
神 登録日: 2016/7/22 居住地: 投稿: 2085 |
Re: dtb_memberテーブルに項目追加 Extensionの最初ではまだCompanyは追加されていないので、エラーになりますね。
下記だけで良いのでは? $builder->add('Company', Company::class, [ 'required' => true, 'constraints' => [ new NotBlank(), ], 'attr' => [ .... } ]); |
start |
投稿日時: 2020/7/12 11:32
対応状況: 解決済
|
一人前 登録日: 2017/11/9 居住地: 投稿: 109 |
Re: dtb_memberテーブルに項目追加 ご返事ありがとうございました。
丁寧に説明頂いで本当にありがとうございました。解説出来ました。 今後とも宜しくお願い致します。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |