PageCacheの拡張

2015年5月22日 at 15:10

いつも拝見し勉強させて頂いております。

キャッシュ機能の拡張するパッケージを作成しているのですが、
拡張した「PageCache」クラスをどのように組み込むか悩んでおります。

「Concrete/application/bootstrap/autoload」の中で「PageCache」のエイリアス再定義を行って参照先を変更しました。
しかし、「Concrete/application/bootstrap/startup」から実行する「Application」クラスでは、「PageCache」クラスをエイリアスで定義していない為、カスタマイズした「PageCache」クラスが実行できなく、どのような方法で実装するのが良いかご教示頂けますでしょうか。

concrete5は、「5.7.4.1」versionを利用しています。
よろしくお願いします。

タグ:

Re: PageCacheの拡張

2015年5月22日 at 15:28
Application クラスでエイリアスでない full-namespaced なPageCacheクラスを使用している意図は、ミスなのか仕様なのか判別できませんが、キャッシュのカスタマイズにおいては、一般的にPageCacheクラスを変更するのではなく、PageCacheクラスから呼ばれるキャッシュライブラリーを新たに開発する方が良いです。デフォルトではFilePageCacheが入っていますが、設定値 concrete.cache.page.adapter で変更できます。
 

Re: Re: PageCacheの拡張

2015年5月22日 at 15:39
hissy様

ご回答ありがとうございます!大変助かりました。
hissy様に頂いた方法にて実装させて頂きます。

「concrete/config/app」にてエイリアス登録されている為、変更すれば容易にカスタマイズできると
思っていたのですが、確かにfullで指定されている理由は難しいですね。
(Applicationの記載をfullからaliasにすると問題なく動作したので、ミスのような気がしますが)

ありがとうございました。
 

Re: PageCacheの拡張

2015年5月22日 at 18:32
つづきでの質問となり恐縮ですが、よろしくお願い致します。

adapterを利用したライブラリー開発につきまして、
「PageCache」クラスでは、concrete.php内の「adapter」設定値からクラスを読み込みにいきますが、
「PageCache」クラス「getLibrary」において「\\Concrete\\Core\\Cache\\Page\\」をprefixとしてロードしています。
prefixから、「PageCache」クラスを継承したカスタムクラスの配置場所は、「concrete/src/Cache/Page/」の下に置くことを意図しているのでしょうか?
「concrete/」配下は、拡張において一切触らない認識でいたので少々混乱しています。
実装につきまして、見識やご経験ありましたらアドバイス頂ければ幸いです。

よろしくお願い致します。
 

Re: PageCacheの拡張

2015年5月22日 at 19:07
確かに。5.7ではまだキャッシュアダプターを追加したことがないのですが、ここは見落とされてる可能性がありますね。core_class関数を使うよう、プルリクエストで提案してみると良いかもしれません。
 

Re: Re: PageCacheの拡張

2015年5月22日 at 19:28
hissy様

度々ありがとうございます。
まだ、考慮されていない可能性が高いのですね。
おかげさまでスッキリしました。(解決はしていませんが。。。)
プルリクエストの経験がないため、手順等確認し検討してみます。

ありがとうございました。
 

Re: PageCacheの拡張

2015年5月23日 at 4:08
とりあえず、送ってみました。マージされるかは分かりませんが
http://github.com/concrete5/concrete5/pull/2492
 

Re: PageCacheの拡張

2015年5月23日 at 8:35
hissy 様

プルリクエストありがとうございます。
やり方、英語わからず、困っていました。
取り込まれるか楽しみに待ちたいと思います。

簡単ですがお礼まで。
 

Re: PageCacheの拡張

2015年5月25日 at 18:15
hissy様

プルリクエストの内容にて実装確認させて頂いている中で、
他疑問点ありましたので、お時間あるタイミングで確認頂けたら幸いです。

パッケージにて、adapterの拡張(PageCacheクラスを継承したクラス)にて実装した場合、
「Concrete\Core\Foundation\Environment」「getOverrides」メソッドにて
「is_dir(DIR_PACKAGES_CORE)」の箇所がありますが、
「DIR_PACKAGES_CORE」→「DIR_BASE_CORE . '/packages'」とディレクトリ構成と不一致な内容と思われ、同様な処理を行っている箇所では、
「$dirp = (is_dir(DIR_PACKAGES . '/' . $pkgHandle)) ? DIR_PACKAGES : DIR_PACKAGES_CORE;」
と「DIR_PACKAGES」を主として取得していました。
これは、(5.6)時代の名残で「Environment」クラスの(5.7)未対応と考えられますでしょうか?

5.7から触り始め、経験が浅くいろいろとお聞きしてしまい大変申し訳ございません。
よろしくお願いします。
 

Re: PageCacheの拡張

2015年5月25日 at 18:20
コアパッケージは、concreteディレクトリ内にバンドルされているパッケージで、5.6の頃からあります。通常のパッケージはインストールが必要ですが、コアパッケージはコアと同時に有効になります。concrete5を独自CMSとして拡張して配布する際には有用なオプションですが、ほとんど使われていないと思います。
 

Re: Re: PageCacheの拡張

2015年5月25日 at 19:45
hissy様

お忙しい中、ご回答頂きありがとうございます。
ほぼ使われていない内容とのこと、あまり意識せずとも大丈夫そうですね。
ありがとうございました!
 

Re: PageCacheの拡張

2015年5月28日 at 18:47
度々申し訳ありませんが質問させてください。
Cache機能の拡張につきまして、
パッケージにて実現する際に「concrete/bootstrap/start.php」の処理からすると、
キャッシュされているかの確認する処理「$response = $cms->checkPageCache($request);」の後で
「$cms->setupPackages();」が実行されるため、「PageCache::getLiblary」にてパッケージに含むCache拡張クラスが見つけられなく何かしら事前に処理が必要なのか悩んでおります。
実現方法につきまして、ご教示頂けませんでしょうか?
お時間ありましたら、お手数ですがよろしくお願い致します。
 

Re: PageCacheの拡張

2015年5月28日 at 19:37
仰る通り、フルページキャッシュの確認は、concrete5のアプリケーションライフサイクルにおける非常に早いタイミングで行われますので、パッケージからの拡張は不可能です。私が送ったプルリクエストも、あくまで application ディレクトリにて拡張を行いたいというリクエストで、パッケージからの拡張は意図していません。
 

Re: PageCacheの拡張

2015年5月28日 at 19:55
hissy様

ご回答ありがとうございます!
やはり難しいとのこと承知しました。
認識に相違なかったので自信になりました!
いろいろと試してみたいと思います。