【发布时间】:2012-06-14 11:55:20
【问题描述】:
我有一个自定义的 MVC PHP 框架,它有一个路由器类,它调用一个控制器,它使用一个模型,然后控制器呈现视图等。
我的问题是,从技术上讲,我无法从语义上弄清楚如何允许变量在控制器和视图之间传递。我可以做一个快速而肮脏的修复,但我想要的是控制器:
class IndexController extends Controller{
var $name = "John"; // instance variable
}
并以此为鉴:
<p> <?=$name?> </p>
我的问题是这样的:
- 如何创建一个 Controller->render() 函数或类似的函数,以允许视图从控制器访问实例变量?并且,
- 我怎样才能做到这一点而不做像
$data['view']['name'] = "John";这样的笨拙的事情,或者在默认情况下为我制作的任何新控制器编写十行代码。我想这样做,以使其尽可能干燥。
谢谢。
编辑:FabioCosta 的解决方案
我不确定我是否理解,到目前为止,我的基本控制器是这样的:
<?php
class Controller{
public function __get($key){
if(isset($this->$$key)) return $this->$$key;
}
}
?>
我的基本视图类如下所示:
<?php
class View{
public $controller;
public function render(){
$this->controller = $this;
}
?>
我像这样从路由器初始化:
<?php
$controller = new IndexController();
$view = new IndexView();
$view->render();
?>
但是,这不起作用,我知道我做错了什么。
【问题讨论】:
-
你使用的是什么版本的 PHP?
-
你的 MVC 使用什么框架?
-
我认为我正在使用最新的 PHP 5.3。 @Gavin“我有一个自定义的 MVC PHP 框架......”,就像我自己做的那样。
-
为什么你在 5.3 的时候还在使用
var关键字? -
@Gavin ,请不要使用 CodeIgniter 作为正确 MVC 的示例 .. 甚至一般的正确开发实践
标签: php model-view-controller frameworks dry