Pimcore의 핵심 컨트롤러 재정의

· 3분 읽기

저는 한동안 Pimcore 프로젝트를 진행해 왔지만 평생 PHP와 Symfony를 접해본 적이 없었기 때문에 정말 큰 도전이었습니다.

문서는 훌륭합니다. 정말 훌륭하지만 언어/프레임워크 초보자를 위해 만들어진 것이 아닌 것 같아서 제가 수행한 모든 작업을 기록해야 했습니다.

번들을 사용하여 Pimcore를 확장할 수 있다는 사실을 배운 후 컨트롤러, 자바스크립트 메서드 등을 재정의하는 데 많은 시간을 보냈습니다.

그래서 이번 포스팅에서는 컨트롤러를 어떻게 재정의했는지 설명하겠습니다. 자바스크립트 파일을 재정의하는 방법은 나중에 나올 예정입니다 8.

번들 생성

우선 번들을 생성해야 합니다. Pimcore 문서에 설명된 대로 매우 간단합니다. 프로젝트 폴더에서 bin/console pimcore:generate:bundle --namespace=EmiDemo/EmiDemoBundle을 실행하기만 하면 됩니다.

몇 가지 질문이 표시되지만 걱정할 것은 없습니다.

이전에 선언한 네임스페이스를 사용하여 src 폴더 아래에 새 폴더가 생성되며, 그 안에는 번들에 필요한 모든 파일이 포함됩니다.

또한 플러그인은 Pimcore 관리 사이트에서 감지되지만 비활성화되므로 사용을 시작하려면 활성화해야 합니다.

컨트롤러에서 메서드 재정의

컨트롤러에서 메서드를 재정의하려면 먼저 업데이트하려는 작업을 찾아야 합니다. 이것은 쉬운 것 같지만 제가 일반적으로 수행하는 방법을 알려 드리겠습니다(팀 동료인 Cesar에게서 배웠습니다).

먼저 컨트롤러가 작업을 수행한다고 생각되는 페이지로 이동합니다. 제 경우에는 자산을 열 때 로드되는 페이지를 확인하고 싶습니다.

Gyazo의 이미지

그런 다음 콘솔을 열고 네트워크 탭으로 이동하여 동일한 단계를 다시 수행하고 작업을 찾으십시오.

Gyazo의 이미지

이 정보를 통해 자산을 로드하는 작업이 http://localhost/admin/asset/get-data-by-id?_dc=1607601778450&id=2&type=image임을 알 수 있습니다. 이를 통해 컨트롤러 작업이 get-data-by-id임을 알 수 있습니다.

코어 컨트롤러에서 액션 찾기

나에게 가장 간단한 방법은 Visual Studio Code의 모든 파일을 찾는 것입니다.

Gyazo의 이미지

아마도 둘 이상을 찾을 것이므로 살펴보고 어느 것이 하나인지 결정해야 합니다. 우리의 경우 자산으로 작업 중이므로 AssetController.php를 사용하려는 것이 분명합니다.

코어 컨트롤러 수정

개발자에 따라 다르며 컨트롤러를 재정의하고 거기에서 개발하는 것이 더 빠르기 때문에 일반적으로 수행하지 않습니다. 하지만 먼저 코어 번들의 컨트롤러를 업데이트하여 변경 사항이 작동하는지 확인하는 것이 좋습니다.

우리의 경우에는 메서드 시작 부분에 메시지를 반환하여 제대로 작동하는지 확인하겠습니다.

return $this->adminJson(['success' => false, 'message' => "Overriding the getDataByIdAction in the core!!"]);

Gyazo의 이미지

그런 다음 자산을 다시 로드하고 네트워크 탭을 확인해 보겠습니다.

Gyazo의 이미지거기에 있는 것을 유지하여 나중에 핵심 메시지 대신 번들 메시지를 사용하고 있음을 알 수 있도록 합시다.

이제 우리가 한 일을 추적하기 위해 임시 파일에 복사해 보겠습니다.

해당 변경 사항을 번들로 이동

이제 이러한 변경 사항을 번들로 이동하려면 먼저 핵심 컨트롤러에서 몇 가지 항목이 필요합니다.

  • 네임스페이스
  • 수입품
  • 컨트롤러 이름

Gyazo의 이미지

그리고 분명히 우리가 재정의하려는 메서드인 getDataByIdAction가 있습니다.

컨트롤러 노출

컨트롤러를 노출해야 합니다. 이를 위해서는 /src/EmiDemo/EmiDemoBundle/Resources/config/pimcore/routing.yml 파일로 이동하여 다음을 추가해야 합니다.

options:
        expose: true

또한 prefix를 재정의할 항목(이 경우에는 admin 컨트롤러)으로 변경해야 합니다.

그래서 결국에는 이런 모습이 될 것입니다

emi_demo_emi_demo:
    resource: "@EmiDemoEmiDemoBundle/Controller/"
    type:     annotation
    prefix:   /admin
    options:
        expose: true

DefaultController.php

파일에서 가져오기를 추가하고 재정의할 컨트롤러로 컨트롤러를 확장합니다.

Gyazo의 이미지

그런 다음 코어 컨트롤러에서 메서드를 복사하고, 이 경우 반환되는 메시지를 업데이트합니다.

Gyazo의 이미지

기억하신다면 코어 컨트롤러에 이미 Overriding the getDataByIdAction in the core!! 메시지가 있으며 이제 Overriding the getDataByIdAction in the bundle!!가 표시되어야 합니다.

Gyazo의 이미지

아무것도 반환하지 않고 이제 이전과 같이 페이지를 볼 수 있는지 살펴보겠습니다.

Gyazo의 이미지

return 문을 주석 처리하고 다시 로드하세요.

Gyazo의 이미지

그게 다야

이 작은 데모를 통해 기존 Pimcore 코어 컨트롤러를 얼마나 쉽게 재정의할 수 있는지 확인할 수 있습니다. 따라야 할 몇 가지 단계가 있지만 어렵지 않습니다. 변경하는 동안 때때로 컨트롤러를 노출하고 캐시를 지우는지 확인하십시오. 때로는 캐시되어 작동하지 않고 단지 캐시만 되어 있다고 생각하게 됩니다.

자바스크립트 파일을 재정의하는 방법이 궁금하다면 다른 튜토리얼을 통해 확인하세요 😁.