modelとhelperについて教えてください

2012年9月2日 at 15:49

/modelsや/helpersの下にクラスファイルを置くと呼び出せますが、
/packegaes/helpersの下に置いたファイルはLoader::helper()するとnot foundになります。
/packages/modelsの場合は、Loader::model()ではエラーになりませんが、$m=new Tomoac()では、クラスが見つかりませんというエラーになります。

/packagesの下に、modelやhelperを置くことはできないんでしょうか。

タグ:

Re: modelとhelperについて教えてください

2012年9月2日 at 19:00
パッケージのModelやHelperを呼び出す際には、パッケージハンドルを指定しないといけません。
http://www.concrete5.org/api/Core/Loader.html#model
http://www.concrete5.org/api/Core/Loader.html#helper

ブロックタイプの場合は、BlockTypeクラスにgetPackageHandleメソッドがありますので、それが使えます。
http://www.concrete5.org/api/Blocks/BlockType.html#getPackageHandle

既存のブロックで実例がぱっと思い浮かびませんでした…。
 

Re: modelとhelperについて教えてください

2012年9月2日 at 22:58
ありがとうございました。

明日試してみます。

ところで、model, helper, library はどういう基準で使い分けるのでしょうか。
 

Re: modelとhelperについて教えてください

2012年9月3日 at 6:32
ぼくも勉強したわけではないので感覚ですが…。

モデルは、オブジェクト指向プログラミングにおけるオブジェクトです。データのやりとりをするのが主な用途ですかね。

ヘルパーは、HTMLの出力を簡単にしてくれたり、メールの送信を楽にしてくれたり、そういうお助け系です。

ライブラリーは、ヘルパーといまいち違いを説明しにくいですが、単機能のヘルパーに対していろいろな機能がセットになったものって感じですかねー。
 

Re: modelとhelperについて教えてください

2012年9月3日 at 17:54
試しましたらうまくできました。ありがとうございました。

>ブロックタイプの場合は、BlockTypeクラスにgetPackageHandleメソッドがありますので、それが使えます。
>http://www.concrete5.org/api/Blocks/BlockType.html#getPackageHandle

このfunctionをblockのcontrollerからの呼び出し方方わかりません。
$b->とか$c->とかではnot found になってしまいました。

ま、とりあえず、生の文字列を指定して、loader::model()を呼び出しました。


このmodelですが、対象のファイルがないときPHP Fatal Error(not found)になります。
先立って、有無を判定する方法はないでしょうか?
 

Re: Re: modelとhelperについて教えてください

2012年9月3日 at 21:18
try catch で いけるんじゃないでしょうか。
 

Re: modelとhelperについて教えてください

2012年9月4日 at 7:54
そうりゃそうでしたね。

聞き方を間違えました。関連を持つパッケージで、片方のパッケージがインスートールされているかどうか、Concrete5の有効なパッケージであるかどうかを判定したいです。
ファイルがあるかどうかでなく。
 

Re: Re: modelとhelperについて教えてください

2012年9月4日 at 8:32
packageモデルのgetByHandle()が使えるんじゃないかと思います。
 

Re: modelとhelperについて教えてください

2012年9月4日 at 8:50
getByHandle()でとれました。
ありがとうございました。