Tùy chỉnh Entity

Tùy chỉnh Entity

Các trường thực thể có thể được mở rộng bằng cách sử dụng các đặc điểm và chú thích @EntityExtension. Vì các lớp Proxy được tạo mà không sử dụng tính kế thừa, bạn có thể cùng tồn tại với nhiều trình cắm và tiện ích mở rộng từ các tùy chỉnh của riêng bạn.

<?php

namespace Customize\Entity;

use Doctrine\ORM\Mapping as ORM;
use Eccube\Annotation\EntityExtension;

/**
  * @EntityExtension("Eccube\Entity\Product")
 */
trait ProductTrait
{
    /**
     * @ORM\Column(type="string", nullable=true)
     */
    public $maker_name;
}

Đối với đối số chú thích @EntityExtension, chỉ định lớp mà bạn muốn áp dụng đặc điểm. Trong đặc điểm, thực hiện trường bạn muốn thêm. Sử dụng chú thích của ORM của Doctrine, chẳng hạn như @ ORM \ Cột, để đặt định nghĩa cơ sở dữ liệu.

Sau khi thực hiện tính trạng này, hãy tạo lớp Proxy bằng lệnh bin/console eccube:generate:proxies

bin/console eccube:generate:proxies

Khi bạn có thể tạo proxy, hãy sử dụng lệnh  bin/console doctrine:schema:update để phản ánh định nghĩa trong cơ sở dữ liệu.

## Xác nhận SQL sẽ được thực thi
bin/console doctrine:schema:update --dump-sql

## Thực thi SQL
bin/console doctrine:schema:update --force

Controller và twig

Khi sử dụng nó với Controller hoặc Twig, bạn có thể sử dụng nó mà không có bất kỳ ý thức cụ thể nào.

// Ví dụ sử dụng trên controller
public function index()
{
    $Product = $this->productRepository->find(1);
    dump($Product->maker_name);

    $Product->maker_name = 'あああ';
    $app['orm.em']->persist($Product);
    $app['orm.em']->flush();
    ...

Tự động tạo biểu mẫu từ Entity

Bạn có thể tự động tạo biểu mẫu bằng cách thêm chú thích @FormAppend vào trường được mở rộng với chú thích @EntityExtension

<?php

namespace Customize\Entity;

use Doctrine\ORM\Mapping as ORM;
use Eccube\Annotation as Eccube;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * @Eccube\EntityExtension("Eccube\Entity\BaseInfo")
 */
trait BaseInfoTrait
{
    /**
     * @ORM\Column(name="company_name_vn", type="string", length=255, nullable=true)
     * @Eccube\FormAppend
     * @Assert\NotBlank(message="Vui lòng nhập nó !!!")
     */
    public $company_name_vn;
}

Khi bạn thêm chú thích @FormAppend, hình thức của trường được thêm sẽ được thêm vào biểu mẫu bằng cách sử dụng thực thể đích. Nếu bạn muốn sử dụng kiểm tra đầu vào, bạn có thể sử dụng các chú thích tiêu chuẩn Symfony như @NotBlank.

Nếu bạn muốn tùy chỉnh biểu mẫu một cách chi tiết, hãy chỉ định auto_Vnder = false và chỉ định form_theme, loại, tùy chọn riêng.

<?php

namespace Customize\Entity;

use Doctrine\ORM\Mapping as ORM;
use Eccube\Annotation as Eccube;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * @Eccube\EntityExtension("Eccube\Entity\BaseInfo")
 */
trait BaseInfoTrait
{
    /**
     * @ORM\Column(name="company_name_vn", type="string", length=255, nullable=true)
     * @Assert\NotBlank(message="Vui lòng nhập")
     * @Eccube\FormAppend(
     *     auto_render=false,
     *     form_theme="Form/company_name_vn.twig",
     *     type="\Symfony\Component\Form\Extension\Core\Type\TextType",
     *     options={
     *          "required": true,
     *          "label": "Tên công ty (VN)"
     *     })
     */
    public $company_name_vn;
}

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *