Pimcore のコア コントローラーをオーバーライドする

· 1分で読める

私はしばらくの間 Pimcore プロジェクトに取り組んでいますが、これまで PHP や Symfony に触れたことはなかったので、これは大きな挑戦でした。

ドキュメントは素晴らしい、つまり真剣に素晴らしいのですが、言語やフレームワークの初心者向けに作られていないように見えるので、私がやったことはすべてメモを取る必要がありました。

バンドルを使用して Pimcore を拡張できることを知ってから、私はコントローラーや JavaScript メソッドなどをオーバーライドするのに何時間も費やしてきました。

そこでこの記事では、コントローラーをオーバーライドする方法を説明します。 JavaScript ファイルをオーバーライドする方法は後ほど説明します 😎。

バンドルの作成

まず最初にバンドルを作成する必要があります。これは 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 からの画像

おそらく複数のものが見つかるので、調べてどれが 1 つであるかを決定する必要があります。この場合、アセットを使用しているため、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 コア コントローラーをいかに簡単にオーバーライドできるかがわかります。いくつかの手順に従わなければなりませんが、難しいことは何もありません。変更を加えている間は、コントローラーを公開し、キャッシュを時々クリアするようにしてください。コントローラーがキャッシュされてしまい、コントローラーが機能していないのにキャッシュされているだけだと思い込んでしまうことがあります。

JavaScript ファイルをオーバーライドする方法について疑問がある場合は、別のチュートリアルで説明します 😁。