2012-04-02 2 views
0

私はZendフレームワークを初めて利用しています。Zendシンプルビューコントローラモデルガイドライン

コントローラをモデルとやりとりして、その情報をビューに送信しています。コードは完全に明らかではないですが、あなたは私がモデルで動作するようにしようとしていますか想像できること

//Controller 
$mapper = new Application_Model_Mapper(); 
$mapper->getUserById($userID);  
$this->view->assign('user_name', $mapper->user_name); 
$this->view->assign('about', $mapper->about; 
$this->view->assign('location', $mapper->location); 

//Model 
class Application_Model_Mapper 
{ 
    private $database; 
    public $user_name; 
    public $about; 
    public $location; 

public function __construct() 
{ 
    $db = new Application_Model_Dbinit; 
     $this->database = $db->connect; 
} 

public function getUserById($id) 
{ 
    $row = $this->database->fetchRow('SELECT * FROM my_table WHERE user_id = '. $id .''); 
    $this->user_name = $row['user_name']; 
    $this->about = $row['about']; 
    $this->location = $row['location']; 
} 

} 

//View 
<td><?php echo $this->escape($this->user_name); ?> </td> 
<td><?php echo $this->escape($this->about); ?></td> 
<td><?php echo $this->escape($this->location); ?></td> 

:現在、私のコードは次のようになります。これが良いZendコーディング戦略であるかどうか疑問に思っていますか?

私は、モデルから引き出すデータがもっとあれば、コントローラは非常に大きくなり始め(アイテムあたり1行)、モデルには多くの公開データメンバーが含まれていると思います。

もっと良い方法があるとは思えませんが、ビューにモデルに直接アクセスすることを避けようとしています。

ありがとうございます!

答えて

1

あなたは分解し、属性によってそれらを再構築するのではなく、完全なオブジェクトを使用する必要があります。

Zendには、すぐに作業を進めるために使用できるDB抽象化レイヤがあります。 (好適なデータ転送)完全なオブジェクトを渡して起動し、出発点として、これらの

http://framework.zend.com/manual/en/zend.db.html http://framework.zend.com/manual/en/zend.db.table.html

を見てビューに。

//This is just a simple example, I'll leave it up to you how you want to organize your models. You can use several strategies. At work we use the DAO pattern. 
$user = $userModel->getUser($id); 
$this->view->user = $user; 

And in your view, 

Name : <?=$this->user->name?> <br> 
About me : <?=$this->user->about?> <br> 
+0

ありがとうございます!したがって、オブジェクトを渡してビューのモデルのメンバーにアクセスすると、変数をエスケープする必要がありますか? –

+0

エスケープは別のものです。しかし、はい、それを表示しているときに出力をエンコードする必要があります。 – JohnP