实现像 ZendFramework 这样有效的控制器/视图关联

发布于 2024-09-03 16:55:48 字数 793 浏览 5 评论 0原文

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

$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(){
  }
 }

I am making my own PHP-MVC framework. i have a question regarding Controller and View Association.
I love the way Zend framework uses view within Controller as follow:

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

so it can be used in view as follow:

echo $this->data;

I am wondering how can i implement this association.
I want to remove codes between /** **/ and want to replace with some magic functions. My codes for controller as as follow:

 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(){
  }
 }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

忘你却要生生世世 2024-09-10 16:55:48

您实际上并不需要魔术函数来实现这一点。您可以这样做:

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

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

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

You don't really need magic functions to implement this. You can just do:

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

Create a method in your controller called set or assign that takes a name and value and store in an array. Before you call view, loop through that array and assign to your view object:

foreach ($this->viewVars as $viewVar) {
    $this->view->$viewVar['name'] = $viewVar['val'];
}
忆离笙 2024-09-10 16:55:48

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

受保护的$_data = array();

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

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

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

Use the magic method __set() and __get().

protected $_data = array();

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

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

Then implement error handling when retrieving values which are not set, etc...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文