質問 > 管理機能 > カテゴリー情報の登録項目に画像を追加 |
管理機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
Rights |
投稿日時: 2021/3/26 13:12
対応状況: −−−
|
一人前 ![]() ![]() 登録日: 2019/3/12 居住地: 投稿: 125 |
カテゴリー情報の登録項目に画像を追加 カテゴリ管理は、カテゴリの名称のみを登録するようにしていますが、カテゴリーイメージとして、画像を登録するよう拡張しましたが、既存のカテゴリーの画像を変更しようとすると生成した画像ファイル名のDBへの登録も、アップロードもされません。
新規登録の際は、選択した画像はアップロードされています。 また、既存のカテゴリーで画像登録のあるデータの画像を削除する処理も動作します。 フォーム要素の指定の仕方に問題がありますでしょうか? ●新規登録 form.file1 ●既存 forms[Category.id].file1 ●アップロード処理 ->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event){ $form = $event->getForm(); $Category = $event->getData(); if ($Category instanceof Category) { $file_delete = $form["file_delete"]->getData(); if ($file_delete) { $fs = new Filesystem(); if ($Category->getFilename1()) { $fs->remove($this->eccubeConfig['eccube_save_image_dir'].'/'.$Category->getFilename1()); $Category->setFilename1(NULL); } } $file1 = $form["file1"]->getData(); if ($file1) { // 画像ファイルアップロード $filename = $this->fileUploader->img_upload($file1, $Category->getFilename1()); $Category->setFilename1($filename); } } }) ; [category.twig] 以下、該当箇所を抜粋 ・新規登録 <form role="form" name="form1" id="form1" method="post" action="{% if TargetCategory.id %}{{ path('admin_product_category_edit', {id: TargetCategory.id}) }}{% elseif Parent %}{{ url('admin_product_category_show', {'parent_id': Parent.id}) }}{% else %}{{ url('admin_product_category') }}{% endif %}" enctype="multipart/form-data"> {% if TargetCategory.hierarchy < eccube_config.eccube_category_nest_level %} {{ form_widget(form._token) }} <div class="form-row mb-3"> <div class="col-auto"> {{ form_widget(form.name) }} {{ form_errors(form.name) }} </div> {# ここを追加 #} <div class="col-auto align-items-center"> {{ form_widget(form.file1, { 'attr': { 'class': 'form-control', 'data-trigger': 'change' }}) }} {{ form_errors(form.file1) }} {{ form_widget(form.filename1) }} {{ form_errors(form.filename1) }} </div> {# ここを追加 #} <div class="col-auto"> <button class="btn btn-ec-regular" type="submit"> {{ 'admin.common.create__new'|trans }} </button> </div> </div> {# エンティティ拡張の自動出力 #} ・既存 <form class="form-row d-none mode-edit" method="POST" action="{{ (Parent and Parent.id) ? url('admin_product_category_show', {'parent_id': Parent.id}) : url('admin_product_category') }}"> {{ form_widget(forms[Category.id]._token) }} <div class="col-auto align-items-center"> {{ form_widget(forms[Category.id].name, {'attr': {'data-origin-value': forms[Category.id].name.vars.value}}) }} {{ form_errors(forms[Category.id].name) }} </div> {# ここを追加 #} <div class="col-auto align-items-center"> {{ form_widget(forms[Category.id].file1, { 'attr': { 'class': 'form-control', 'data-trigger': 'change' }}) }} {{ form_errors(forms[Category.id].file1) }} {% if forms[Category.id].filename1.vars.value %} <div class="c-form__uploadedFilename1"> <img src="{{ asset(forms[Category.id].filename1.vars.value, 'save_image') }}"> ファイル名:{{ forms[Category.id].filename1.vars.value }} {{ form_widget(forms[Category.id].file_delete) }} {{ form_errors(forms[Category.id].file_delete) }} </div> {% endif %} {{ form_widget(forms[Category.id].filename1) }} {{ form_errors(forms[Category.id].filename1) }} </div> {# ここを追加 #} <div class="col-auto align-items-center"> <button class="btn btn-ec-conversion" type="submit">{{ 'admin.common.decision'|trans }}</button> </div> <div class="col-auto align-items-center"> <button class="btn btn-ec-sub action-edit-cancel" type="button">{{ 'admin.common.cancel'|trans }}</button> </div> {# エンティティ拡張の自動出力 #} [CategoryTypeExtension.php]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 Customize\Form\Extension; use Customize\Service\FileUploader; use Eccube\Common\EccubeConfig; use Eccube\Entity\Category; use Eccube\Form\Type\Admin\CategoryType; use Symfony\Component\Filesystem\Filesystem; use Symfony\Component\Form\AbstractTypeExtension; use Symfony\Component\Form\Extension\Core\Type\CheckboxType; use Symfony\Component\Form\Extension\Core\Type\FileType; use Symfony\Component\Form\Extension\Core\Type\HiddenType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormEvent; use Symfony\Component\Form\FormEvents; use Symfony\Component\HttpFoundation\File\File; class CategoryTypeExtension extends AbstractTypeExtension { /** * @var EccubeConfig */ private $eccubeConfig; /** * @var FileUploader */ private $fileUploader; public function __construct( EccubeConfig $eccubeConfig, FileUploader $fileUploader ) { $this->eccubeConfig = $eccubeConfig; $this->fileUploader = $fileUploader; } /** * {@inheritdoc} */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder // ファイルアップロード用の項目 ->add('file1', FileType::class, [ 'mapped' => false, 'required' => false, 'constraints' => [ new \Symfony\Component\Validator\Constraints\File([ 'maxSize' => '10240k', 'mimeTypes' => [ 'image/gif', 'image/jpeg', 'image/png', ], 'uploadErrorMessage' => '画像ファイルを選択してください' ]) ] ]) ->add('filename1', HiddenType::class) ->add('filename2', HiddenType::class) ->add('file_delete', CheckboxType::class, [ 'mapped' => false, 'required' => false, 'label' => 'ファイルを削除', 'value' => '1', ]) ; $builder ->addEventListener(FormEvents::POST_SET_DATA, function (FormEvent $event){ $form = $event->getForm(); $Category = $event->getData(); $filename1 = $Category->getFilename1(); if ($Category instanceof Category) { if ($Category->getFilename1()) { // アップロード済みのファイルをFileTypeにセット $form["file1"]->setData( new File( $this->eccubeConfig["eccube_save_image_dir"]."/".$Category->getFilename1() ) ); } } }) ->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event){ $form = $event->getForm(); $Category = $event->getData(); if ($Category instanceof Category) { $file_delete = $form["file_delete"]->getData(); if ($file_delete) { $fs = new Filesystem(); if ($Category->getFilename1()) { $fs->remove($this->eccubeConfig['eccube_save_image_dir'].'/'.$Category->getFilename1()); $Category->setFilename1(NULL); } } $file1 = $form["file1"]->getData(); if ($file1) { // 画像ファイルアップロード $filename = $this->fileUploader->img_upload($file1, $Category->getFilename1()); $Category->setFilename1($filename); } } }) ; } /** * {@inheritdoc} */ public function getExtendedType() { return CategoryType::class; } } |
Rights |
投稿日時: 2021/3/31 13:56
対応状況: 解決済
|
一人前 ![]() ![]() 登録日: 2019/3/12 居住地: 投稿: 125 |
Re: カテゴリー情報の登録項目に画像を追加 自己レスです。
・既存 <form class="form-row d-none mode-edit" method="POST" action="{{ (Parent and Parent.id) ? url('admin_product_category_show', {'parent_id': Parent.id}) : url('admin_product_category') }}"> ⇒ enctype="multipart/form-data" がありませんでした。 お邪魔しました。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |