1

私はZendと少し混乱しています。多くの例は、コントローラーでのZend_db_Tableの使用法を示しています。しかし、私がMVCについて学んだことから、DBに関することはすべてモデルに含まれているはずです。ZendはPHPチームによって作成および保守されているので、私は本当に何を考えるべきかわからないので、質問せずにルールに従います。

これは私が今のところコントローラーに入れた種類のコードの例です。

私の疑問を明確にすることができた人に感謝します。

$filter = $this->_getParam('filter', array());
$order_by = $this->_getParam('order_by', 'last_name');
$order = $this->_getParam('order', 'ASC');

// Select
$db = Zend_Db_Table::getDefaultAdapter();
$select = $db->select('*')->from('contact_address');

// Filter / Where
$where = array();
if(isset($filter['id']) AND $filter['id'] != ""){                                   $select->where('id = ?' , $filter['id']); }
if(isset($filter['title']) AND $filter['title'] != ""){                             $select->where('CONCAT(first_name, " ", last_name) LIKE ?', $filter['title'] . '%'); }
if(isset($filter['phone']) AND preg_match_all('/\d/', $filter['phone'], $matches)){ $select->where('phone LIKE ?', implode('', $matches[0]) . '%'); }
if(isset($filter['email']) AND $filter['email'] != ""){                             $select->where('email LIKE ?', $filter['email'] . '%'); }
if(isset($filter['published']) AND $filter['published'] != ""){                     $select->where('published = ?', $filter['published']); }
else{                                                                               $select->where('published >= 0'); }

// Order
$select->order($order_by . ' ' . $order);
$select->order('last_name ASC');

// Pagination
$paginator = Zend_Paginator::factory($select);
$paginator->setCurrentPageNumber($this->_getParam('page', 1));
$paginator->setItemCountPerPage($_SESSION['LIMIT_PER_PAGE']);
4

2 に答える 2

2

これは、zendの第一人者http://www.slideshare.net/weierophinney/architecting-your-modelsからのZendのモデル部分に関する素晴らしいスライドショーです。ZendがMVCをどのように見ているかを完全に理解するのに少し時間がかかりました。さらに一歩進んで、モジュール間通信用のサービスレイヤーを導入しました。ZendFrameworkでサービスレイヤーを実装するにはどうすればよいですか?

于 2012-10-16T06:07:55.740 に答える
1

はい、あなたが正しいと思うことは、Dbとの相互作用のほとんどがモデルに入るはずだということです。

ただし、使いやすさとシンプルさにより、コントローラー自体でいくつかのクエリを実行しやすくなる場合があります。

ただし、コードをどのようにするかは完全にあなたの選択です。

あなたが与えた例を見てみましょう。それを行う方法は問題ないように見えます。それぞれのモデルでメソッドを作成し、そこから取得して$ select変数を返すパラメーターを使用してメソッドを呼び出した場合と同じように、それを実現できます。

それが役に立てば幸い。

于 2012-10-16T02:48:10.143 に答える