像ZendFramework一样实现有效的Controller / View Association

时间:2010-05-28 15:45:54

标签: php model-view-controller oop design-patterns

我正在创建自己的PHP-MVC框架。我有一个关于控制器和视图关联的问题。 我喜欢Zend框架在Controller中使用视图的方式如下:

$this->view->data = 'Data here';

所以它可以在视图中使用如下:

echo $this->data;

我想知道如何实现这种关联。 我想删除/** **/之间的代码,并希望替换一些魔术函数。我的控制器代码如下:

 class UserController extends Controller{
  /************************************/
  public function __construct(){
   $this->view = new View();
   $this->view->setLayout( 'home' );
  }
  function __destruct(){
   $this->view->render();
  }
  /************************************/
  public function index(){
   $this->redirect('user/login');
  }
  public function login(){   
  }
  public function register(){
  }
  public function forgotPassword(){
  }
 }

2 个答案:

答案 0 :(得分:1)

你真的不需要魔术功能来实现它。你可以这样做:

$this->view->var1 = 'val1';

在控制器中创建一个名为setassign的方法,该方法采用名称和值并存储在数组中。在调用view之前,遍历该数组并分配给您的视图对象:

foreach ($this->viewVars as $viewVar) {
    $this->view->$viewVar['name'] = $viewVar['val'];
}

答案 1 :(得分:0)

使用魔术方法__set()和__get()。

protected $ _data = array();

public function __set($name, $value)
{
   $this->_data[$name] = $value;
}

public function __get($name)
{
   return $this->_data[$name];
}

然后在检索未设置的值时实现错误处理等...