パッケージコントローラーから使用するクラスを参照する部分の記述について

2018年4月16日 at 14:49

テーマのパッケージ化に関する質問です。
use演算子でパッケージコントローラーから使用するクラスを参照する部分ですが「concrete5の使い方・ヘルプ」と「cloneamental」とでは内容に違いがあるようです。

concrete5の使い方・ヘルプ
http://concrete5-japan.org/help/5-7/developer/designing-for-concrete5/packaging-your-theme/overview-and-full-screencast/

cloneamental
http://github.com/MrKarlDilkington/cloneamental/blob/master/controller.php


<use演算子でパッケージコントローラーから使用するクラスを参照する部分>

# concrete5の使い方・ヘルプ


use Concrete\Core\Package\Package;
use Concrete\Core\Page\Theme\Theme;


# cloneamental

use Package;
use PageTheme;



<インストール処理の部分>

# concrete5の使い方・ヘルプ

public function install()
{
$pkg = parent::install();
Theme::add('urbanic', $pkg);
}


# cloneamental

public function install()
{
$pkg = parent::install();
PageTheme::add('cloneamental', $pkg);
}



手元の環境ではどちらの記述でも動作するようですが両者はどのように使い分けられているのでしょうか。


# concrete5 バージョン
8.3.2

# PHP バージョン
7.1.4

# サーバー
エックスサーバー

# クライアント
macOS 10.12 + Firefox 59

タグ:

Re: パッケージコントローラーから使用するクラスを参照する部分の記述について

2018年4月16日 at 15:47
> 手元の環境ではどちらの記述でも動作するようですが両者はどのように使い分けられているのでしょうか。

すごく簡単に説明すると「使う人の好みと条件」になります。

もうちょっと詳しく説明すると、クラスのオーバーライドを許可するか、コアのクラスを使い続けることにこだわるかです。


use Theme;
use Package;

は、エイリアスクラスと呼ばれるものです。

/concrete/config/app.php
を御覧ください。

の中で「PageTheme」「Package」を検索していただくと、
「\Concrete\Core\Page\Theme\Theme」や「\Concrete\Core\Package\Package」のエイリアスとして指定している箇所をご覧いただけるかと思います。

結局的には、「PageTheme」「Package」も「\Concrete\Core\*」も変わらないのです。

ただ、「/concrete/config/app.php」の記述は「/application/config/app.php」で上書きできます。

なので、サイトによっては「PageTheme」「Package」が、別のクラスに割当てられている場合があります。

別のクラスへの割当てを許さない時は「\Concrete\Core\*」の表記を使います。

ただ、そういうカスタマイズをしている人は、特に Package や PageTheme は特殊ケースだと思いますので、結果的にはあまり変わらないのではないかと考えています。

(今まで Package や PageTheme クラスをオーバーライドをした人を見たことがないので・・・。)
 

Re: パッケージコントローラーから使用するクラスを参照する部分の記述について

2018年4月16日 at 20:28
Ueno様

/concrete/config/app.phpのエイリアス指定箇所を確認できました。
また少しconcrete5の理解を深められたように思います。
大変わかりやすい解説をいただきましてありがとうございました。