SYSTEM_KDです。
EC-CUBE4でのプラグイン開発時メモです。
EC-CUBE4系では、traitを用いてEntityを拡張できるようにEntityの拡張機構が用意されています。
※Entity拡張機構
これによって、プラグインから本体のEntityを拡張することができるのですが、プラグインで追加したEntityを別のプラグインから拡張しようとして、微妙にハマってしまったとメモになります。
プラグインで追加したEntityをプラグインで拡張
やり方としては、本体のEntityを拡張するときと同様。
アノテーションで適用するEntityを指定する際に、プラグインのEntityを指定するだけ。
/**
* Trait LabTrait
* @Eccube\EntityExtension("Plugin\TargetPlugin\Entity\TargetClass")
*/
trait LabTrait
{
public function getDummy()
{
return "xxx";
}
}
ただ、拡張される側のEntityを普通に用意しただけだと、Entity重複してるよと怒られるので、本体側のEntityと同じように、クラスが存在してるかチェックで囲むようにします。
※これを実施しておかないと、proxy生成は成功するけど生成されたファイルを削除しないと、それ以降どうしようもなくなってしまうので注意
if (!class_exists('\Plugin\TargetPlugin\Entity\TargetClass')) {
/**
* TargetClass
*
* [略]
*/
class TargetClass extends \Eccube\Entity\AbstractEntity
{
・・・
}
}
これでOKっと思ったけど、ここがハマりポイントでした。
これだと、bin/console eccube:generate:proxies
を実行した際にエラーが発生してしまいました。
プラグインのEntityは拡張できないのかなと思いつつ、EC-CUBEの拡張機構部分のコードを追ってみると、}
の後に改行が欲しそうな雰囲気だったので、付け足してみたら解決しました。
(実は環境の問題とかって可能性もあるのかな・・・)
if (!class_exists('\Plugin\TargetPlugin\Entity\TargetClass')) {
/**
* TargetClass
*
* [略]
*/
class TargetClass extends \Eccube\Entity\AbstractEntity
{
・・・
}
}
// ← 最後の空行部分
ということで、Pluginで追加したEntityを別Pluginにて拡張する際のメモでした。
0 件のコメント:
コメントを投稿