ブロックコントローラーをパッケージからオーバーライドしたい

概要

パッケージからコアのブロックコントローラーを上書きしたい。

情報

使用バーション:8.5.9

目的

自作パッケージの blocks/content/controller.php でコアの blocks/content/controller.php をオーバーライドしたいと考えています。

application/blocks/content/controller.php で上書きドキュメントは見つかるのですがパッケージから上書きするドキュメントが見つかりませんでした。

古い方法で下記の処理を行いパッケージの on_start() 時に読み込ませる方法は見つかりましたが、 Environment クラスは既に無効化されているようでこの方法では上書き出来ませんでした。

public function on_start() {
   $objPkg = Loader::package($this->pkgHandle);
   $objEnv = Environment::get();
   $objEnv->overrideCoreByPackage('blocks/block_name/controller.php', $objPkg);
}

パッケージから規定のパスにブロックの view.php を置くことでオーバーライドが可能なので処理の追加は出来ます。しかし controller.php で上書きする方がコードとしても綺麗なため質問をさせていただきました。
回答よろしくお願いいたします。

1 Like

@Genki.K お世話になります。
確かにコアブロックの controller.php をオーバーライドする方法は書いてありませんね。

自分は、通常、そういったカスタマイズは application フォルダにするか、
ブロックタイプを増やして、あくまでも別の記事ブロックとして新規に作成して登録するかという方法をとるかしています。

とにかく確証がないので、英語の方でも聞いてみました

1 Like

@katz515
お世話になります。英語へも展開いただきありがとうございます。

やはりコアの上書きは application フォルダで行うのが基本ですよね。

既にパッケージで運用しているシステムの改修調査からの疑問となり質問させていただきました。

パッケージから上書く場合、複数のパッケージから上書き処理があると排他制御など障害が発生する可能性もあるため基本的には許可されていたいのではないか?と考えています。

ただ、禁止されている記述も特になく view.php で上書きすることは可能なため質問させていただきました。

確かにパッケージの性質上ブロック等の機能は上書きするよりも拡張版を作る方が良いのかもしれません。

引き続きよろしくお願いいたします。

@Genki.K

やはりコアの上書きは application フォルダで行うのが基本ですよね。

基本的にはそうですね。
パッケージで上書きができるのは view ファイルまでとなっています。

ここは難しいところですが、 package は複数インストールすることができます。
例えば、同じ記事ブロックの controller のオーバーライドが別々の packages の中にあった時、どちらの controller.php を優先すべきかなどの問題も・・・あったような、無かったような・・・・。

反面、view ファイルは、名前をきちんと設定して、ブロックテンプレートとして複数存在できるので、 view 部分だけをあつめたパッケージも可能です。

1 Like

@Genki.K

on_start でクラスの bind をすることでできないかと来ました。
試してみてくれますか?