命名規約
プラグインコード
重複を避けるため, [ベンダー名][プラグイン]の形式を推奨
キャメルケースで記述する
AcmeCategoryContent
テーブル名
※プラグイン固有のテーブルを作成する場合
plg_[プラグインコードのスネークケース]_xxx
use Doctrine\ORM\Mapping as ORM;
/**
* Config
*
* @ORM\Table(name="plg_acme_category_content_config")
* @ORM\Entity(repositoryClass="Plugin\AcmeCategoryContent\Repository\ConfigRepository")
*/
class Config
テーブルのカラム名およびgetter/setter
※traitを使用してカラムを追加する場合
[プラグインコードのスネークケース]_xxx
getter/setterはキャメルケースで記述する
use Eccube\Annotation\EntityExtension;
use Doctrine\ORM\Mapping as ORM;
/**
* @EntityExtension("Eccube\Entity\Customer")
*/
trait CustomerTrait
{
/**
* @ORM\Column(name="acme_category_content_xxx" type="integer", nullable=true)
*/
private $acme_category_content_xxx;
public function getAcmeCategoryContentXxx()
{
}
public function setAcmeCategoryContentXxx($xxx)
{
}
}
ルーティング
[プラグインコードのスネークケース]_xxx
class ConfigController extends AbstractController
{
/**
* @Route("/%eccube_admin_route%/acme_category_content/config", name="acme_category_content_admin_config")
* @Template("@AcmeCategoryContent/admin/config.twig")
*/
public function index(Request $request)
URL
/[プラグインコードのスネークケース]/xxx/xxx
class ConfigController extends AbstractController
{
/**
* @Route("/%eccube_admin_route%/acme_category_content/config", name="acme_category_content_admin_config")
* @Template("@AcmeCategoryContent/admin/config.twig")
*/
public function index(Request $request)
FormExtensionで追加するフィールド
[プラグインコードのスネークケース]_xxx
class XxxExtention extends AbstractTypeExtension
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('acme_category_content_name', TextType::class);
htmlで使用するID, class
[プラグインコードのスネークケース]_xxx
<div id="acme_category_content_info" class="card rounded border-0 mb-4">
コマンド名
[プラグインコードのスネークケース]:xxx:xxx
class XxxCommand extends Command
{
protected static $defaultName = 'acme_category_content:xxx:yyy';
言語ファイル
[プラグインコードのスネークケース].xxx.xxx
# nav
acme_category_content.admin.nav.category: カテゴリコンテンツ一覧
# flash messages
acme_category_content.admin.save.success: 登録しました。
acme_category_content.admin.save.failed: 登録に失敗しました。
プラグインコード以降の命名規則はEC-CUBE本体の命名規則に従う https://github.com/EC-CUBE/ec-cube/pull/3593
パラメータ
[プラグインコードのスネークケース].xxx.xxx
parameters:
acme_category_content.xxx: 1
services:
acme_category_content.log.formatter.line:
class: Monolog\Formatter\LineFormatter
arguments: ...
@chihiro-adachi プラグインで定義するTwigBlock名についても追記してもらいたいです。
BlockPrefix は不要なため折りたたみました。
Form/Type BlockPrefix
[プラグインコードのスネークケース]_xxx_xxx
public function getBlockPrefix()
{
return 'acme_category_content_admin_config';
}
<\details>
@okazy BlockPrefixは宣言しなければ自動で付与されるので不要でいいいんじゃないでしょうか。 BlockPrefixを直接利用するシーンもほとんどないかと思いますし。
本体でついてるのはsymfony2.7での名残ですね。
ありがとうございます、了解しました。 確かにあんまり使うところないなと思いながら書いていました。
ルーティングの命名規則はフロント画面と管理画面で分けた方がいいとおもいます。
管理画面は admin をさらに前につけるほうがいいのではないでしょうか?
フロント画面
[プラグインコードのスネークケース]_xxx
class PageController extends AbstractController
{
/**
* @Route("/acme_category_content/page", name="acme_category_content_page")
* @Template("@AcmeCategoryContent/page.twig")
*/
public function index(Request $request)
管理画面
admin_[プラグインコードのスネークケース]_xxx
class ConfigController extends AbstractController
{
/**
* @Route("/%eccube_admin_route%/acme_category_content/config", name="admin_acme_category_content_config")
* @Template("@AcmeCategoryContent/admin/config.twig")
*/
public function index(Request $request)