Tùy chỉnh bằng các tính năng của Symfony

Tổng quan

EC – CUBE dựa trên Symfony và Doctrine. Do đó, bạn có thể sử dụng cơ chế mở rộng được cung cấp bởi Symfony và Doctrine.

Ở đây, chúng tôi sẽ giới thiệu một cơ chế mở rộng điển hình và phương pháp lắp đặt của nó.

Sự kiện Symfony

Bạn có thể sử dụng hệ thống sự kiện của Symfony.

Tạo một trình lắng nghe sự kiện để hiển thị hello world

Tạo HelloListener.php app/Customize/EventListener

<?php

namespace Customize\EventListener;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;

class HelloListener implements EventSubscriberInterface
{
    public function onResponse(FilterResponseEvent $event)
    {
        echo 'hello world';
    }

    public static function getSubscribedEvents()
    {
        return [
            KernelEvents::RESPONSE => 'onResponse',
        ];
    }
}

Sau khi tạo, màn hình được hiển thị (nó được hiển thị trên bất kỳ trang nào) và nếu  hello world hiển thị thì nó thành công.

Nếu nó không hiển thị bạn hãy xóa cache bin/console cache:clear --no-warmupbạn cũng có thể kiểm tra event đã đăng ký bằng lênhbin/console debug:event-dispatcher

Để biết chi tiết về sự kiện này, vui lòng tham khảo sau đây:

Command

Bạn có thể tạo các lệnh console có thể chạy từ bin/console

Tạo một lệnh để hiển thị hello world

Tạo HelloCommand.php bên trong  app/Customize/Command

<?php

namespace Customize\Command;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;

class HelloCommand extends Command
{
    // Tên lệnh
    protected static $defaultName = 'acme:hello';

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $io = new SymfonyStyle($input, $output);

        // hiển thị hello world
        $io->success('hello world');
    }
}
  • $defaultNameNó đại diện cho một tên dấu phẩy
  • $io->success('hello world') helllo world được hiển thị

Sau khi tạo, bạn có thể thực thi nó với bin/console

$ bin/console acme:hello

 [OK] hello world

※ Nếu lệnh không được nhận dạng, hãy xóa bộ đệm với bộ đệm bin/console cache:clear --no-warmup

Để biết chi tiết về Command, tham khảo các mục sau:

Doctrine Event

Bạn có thể sử dụng hệ thống sự kiện của Doctrine.

Tạo một người nghe sự kiện để chào đón tên cửa hàng

Tạo HelloEventSubscriber.php bên trong app/Customize/Doctrine/EventSubscriber

<?php

namespace Customize\Doctrine\EventSubscriber;

use Doctrine\Common\EventSubscriber;
use Doctrine\Common\Persistence\Event\LifecycleEventArgs;
use Doctrine\ORM\Events;
use Eccube\Entity\BaseInfo;

class HelloEventSubscriber implements EventSubscriber
{
    public function getSubscribedEvents()
    {
        return [Events::postLoad];
    }

    public function postLoad(LifecycleEventArgs $args)
    {
        $entity = $args->getObject();
        if ($entity instanceof BaseInfo) {
            $shopName = $entity->getShopName();
            $shopName = 'Chào mừng bạn'.$shopName;
            $entity->setShopName($shopName);
        }
    }
}

Sau khi tạo, mở trang trên cùng, sẽ thành công nếu bạn thấy [Chào mừng bạn đến với tên cửa hàng] được hiển thị

Nếu chưa được hiển thị bạn hãy xóa cache bin/console cache:clear --no-warmup

Để biết chi tiết về sự kiện này, vui lòng tham khảo sau đây.

Trong Trình nghe và Người đăng ký Sự kiện của Học thuyết, phương thức cài đặt trong services.yaml được mô tả, nhưng EC – CUBE sẽ tự động đăng ký trình nghe sự kiện của Học thuyết vào vùng chứa. Do đó, thiết lập trong services.yaml là không cần thiết

※ Doctrine Event Listeners and Subscribers,phương thức cài đặc trong  services.yaml được mô tả, nhưng  EC-CUBE tự động đăng ký tình nghe event vào vùng chứa, do đó tromg services.yaml không cần thiết lập

Symfony bundle

// Todo

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 *