最小限のアプローチとドキュメントストア(つまりMongodb)中心のモデルが好きなので、Lithiumフレームワークを使用してアプリケーション構成インターフェイスを構築したいと考えています。
ただし(まだ完全にはリリースされていないことはわかっていますが)、簡単なブログチュートリアルから先に進むための情報、チュートリアル、または例はほとんどありません。
私が今やろうとしているのは、Mongodbにあるコレクションを表示するアプリを作成してから、選択したコレクションを操作できるようにすることです。私は理解できないようです:
a)コレクションを列挙するモデルをどのように構築しますか?できれば内部の命名スキームに従って、
b)使用するコレクションの名前を指定できるように、従来のモデルを破るにはどうすればよいですか?
これらの2つの質問に答えるために私が苦労していることが2つあると思います-おそらく、MVCでモデルを単純なcollection-model-controller-viewの例を超えて移動する方法の根本的な誤解、そして次に、 mongodatasource使用するコレクション。
感謝の気持ちを込めて受け取ったポインタや例。
クリス
アップデート::
そこで、コレクションを設定する方法を理解しました。参考までに、次のように$_meta配列にソースを設定できます。
protected $_meta = array(
'source' => '<<collectionName>>'
);
ただし、DBにあるすべてのコレクションを一覧表示するモデルの使用方法はまだわかりません。哲学的かつ技術的な方法からそれを行う方法について何かアイデアはありますか?
さらなる更新::
だから私は以下のコメントのおかげでもう少し得ました。少なくとも、質問を少し言い換えることができるかもしれません。モデルを次のように定義できます。
<?php
namespace app\models;
use lithium\data\Model;
class Posts extends \lithium\data\Model{
protected $_meta = array('source' => false);
public function testcolls(){
return (self::connection()->sources());
}
}
?>
その後、私の見解では、私は使用することができます:
<?php foreach ($post->testcolls() as $coll): ?>
<h2><?=$coll ?></h2>
<?php endforeach; ?>
それは機能しますが、私が本当にやりたいのは、モデルに「testcolls」メソッドを作成することではありませんが、Medhiが以下に提案するように、findメソッドをオーバーライドする必要があります。私はそれを行う方法とそれが何を返す必要があるのか理解できないようです。ドキュメントはこれについてあまり明確ではありません。
最終更新
以下のコメントと少しの実験に基づいて、コレクションをパラメーターとしてfindを呼び出すことができるようにするために機能する次のことを思いつきました。
モデル:
class Dataqueues extends \lithium\data\Model{
protected $_meta = array('source' => false);
public static function find($filter, array $options = array()) {
if (isset($options['collection'])){
self::meta('source', $options['collection']);
}
return parent::find('all',$options);
}
}
コントローラ:
class DataqueuesController extends \lithium\action\Controller {
public function index() {
$dataqueues = Dataqueues::find('all',array('limit'=>20,'collection'=>'W501'));
return compact('dataqueues');
}
}
コレクションのリストを返すモデルを取得することも、最終的には非常に簡単でした。
class Collections extends \lithium\data\Model{
protected $_meta = array('source' => false);
public static function find($filter, array $options = array()) {
return self::connection()->sources();
}
}
コントローラはオプションやフィルタをサポートしないことに注意してください。