Trao đổi về dự án
Partitech Sonata Extra Bundle

Sonata Extra Bundle: bộ chọn ngôn ngữ

Sonata Extra Bundle cung cấp một bộ chọn ngôn ngữ giàu tính năng, tương thích với các trang lai. Tài liệu này mô tả các bước để kích hoạt và sử dụng bộ chọn ngôn ngữ trong ứng dụng Sonata của bạn. Cấu hình bộ chọn ngôn ngữ Tích hợp với các trang lai Bộ chọ...

Contrôles de compatibilité Symfony et Sonata

Sonata Extra Bundle cung cấp một bộ chọn ngôn ngữ giàu tính năng, tương thích với các trang lai. Tài liệu này mô tả các bước để kích hoạt và sử dụng bộ chọn ngôn ngữ trong ứng dụng Sonata của bạn.

Cấu hình bộ chọn ngôn ngữ

Tích hợp với các trang lai

Bộ chọn ngôn ngữ có thể tích hợp hoàn hảo với các bộ điều khiển và tuyến đường hiện có của bạn. Khi bạn có một bộ điều khiển với một tuyến đường được định nghĩa, bạn có thể tìm thấy và quản lý nó trong trình quản lý trang Sonata. Sonata Extra Bundle cho phép tùy chỉnh URL của hành động.

Ví dụ:

  • Phiên bản tiếng Pháp của một trang bài viết blog: /blog-mon-article/{slug} languageSwitcher_localized_route_fr.png
  • Phiên bản tiếng Anh của cùng một trang: /blog-my-article/{slug} languageSwitcher_localized_route_fr.png

Bộ chọn ngôn ngữ tự động phát hiện các trang được địa phương hóa dựa trên cấu hình. languageSwitcher_menuThảXuống.png

Tiêm dịch vụ định vị

Để kích hoạt tính năng thay đổi ngôn ngữ, hãy tiêm LocaleService vào ứng dụng của bạn:


 use Partitech\SonataExtra\Service\LocaleService;
 

Sử dụng dịch vụ để chèn lộ trình định vị đã tính vào đối tượng yêu cầu:


$linkHeader = $this->localeService->languageSelectorGetHeaderLinks($tagEntity, 'sonata_extra_blog_tag');
$response->headers->set('Link', $linkHeader);

Đối tượng yêu cầu sau đó được sử dụng trong khối thay đổi ngôn ngữ để hiển thị menu thả xuống chọn ngôn ngữ.

Xử lý thực thể và liên kết tuyến đường

Chức năng chính nằm ở việc xử lý các thực thể. Mỗi khi bạn thao tác với một thực thể, quy trình sẽ kiểm tra các phần tử liên quan được định vị. Để kích hoạt điều này, hãy thông báo cho thực thể về các tuyến đường liên quan:

Ví dụ:

class SonataClassificationCategory extends BaseCategory
{
use EntityTranslationTrait;

    private array $baseRouteName = [
        'sonata_extra_blog_category',
        'sonata_extra_blog_search'
    ];
    // ...
}

Quá trình có thể quản lý các loại cấu hình tuyến đường khác nhau. Đặt một đối số với một phương thức truy cập tương ứng để thuận tiện cho việc này.

Ví dụ: Đối với một hành trình như /blog-category/{slug}, quá trình sử dụng $entity->getSlug() hàm để đưa nó vào trình tạo URL.

Điều chỉnh ví dụ cho phù hợp với phiên bản đã cài đặt

Các ví dụ Symfony và Sonata vẫn gắn với các phiên bản được chỉ ra trong bài viết. Symfony 4.x và Symfony 6.2 không còn được duy trì: đối với một dự án hiện tại, hãy sử dụng một nhánh được duy trì và tài liệu tương ứng chính xác với các phụ thuộc của bạn.

php bin/console about
composer show symfony/framework-bundle sonata-project/admin-bundle

Trước khi tiếp tục với mã, hãy kiểm tra các chữ ký, dịch vụ, tuyến đường và mẫu liên quan. Sau đó thêm một bài kiểm tra chức năng bao phủ quyền, mã HTTP và kết quả hiển thị.

Tham chiếu : phiên bản Symfony được hỗ trợ.

Chia sẻ bài viết