我正在创建自己非常简单的MVC,我正在集思广益,从控制器到视图。这涉及将变量从类发送到一个普通的旧PHP页面。
我确信之前已经介绍过,但我想知道人们可以提出什么样的想法。
//this file would be /controller/my_controller.php
class My_Controller{
function someFunction(){
$var = 'Hello World';
//how do we get var to our view file in the document root?
//cool_view.php
}
}
答案 0 :(得分:1)
某种哈希表是一种很好的方法。将变量作为关联数组返回,这将填充视图中的所有空白。
答案 1 :(得分:1)
将变量存储为控制器对象中的属性,然后在渲染时将其提取
class My_Controller {
protected $locals = array();
function index() {
$this->locals['var'] = 'Hello World';
}
protected function render() {
ob_start();
extract($this->locals);
include 'YOUR_VIEW_FILE.php';
return ob_get_clean();
}
}
您可以定义那些神奇的__get和__set方法,使其更漂亮
$this->var = 'test';
答案 2 :(得分:1)
我也正在开发自己的简单MVC,而most simple way
就是......
class My_Controller
{
function someFunction() {
$view_vars['name'] = 'John';
$view = new View('template_filename.php', $view_vars);
}
}
查看课程
class View
{
public function __construct($template, $vars) {
include($template);
}
}
template_filename.php
Hello, <?php echo $vars['name'];?>
我强烈建议您查看PHP Savant http://phpsavant.com/docs/
答案 3 :(得分:1)
我会结帐Zend_View
以及它如何完成视图渲染。
你可以在github上获得View
和AbstractView
的来源 - 不幸的是我找不到易于浏览的当前存储库(在svn中)。
本质上,视图变量包含在View
对象中(您的控制器可以访问),然后在该对象内呈现模板(普通的旧php文档)。该方法允许模板访问$this
。
这将是:
<?php
class View
{
public function render()
{
ob_start();
include($this->_viewTemplate); //the included file can now access $this
return ob_get_clean();
}
}
?>
所以在你的控制器中:
<?php
class Controller
{
public function someAction()
{
$this->view->something = 'somevalue';
}
}
?>
你的模板:
<p><?php echo $this->something;?></p>
在我看来,这种模式可以让你对视图有很大的灵活性。
答案 4 :(得分:0)
我为免费的PHP课程创建了自己的MVC,我正在为少数想要在PHP上变得更好的人开展。
到目前为止,最好的方法是使用Command + Factory模式。
E.g。
interface ControllerCommand
{
public function execute($action);
}
在每个控制器中:
class UserController implements ControllerCommand
{
public function execute($action)
{
if ($action == 'login')
{
$data['view_file'] = 'views/home.tpl.php';
}
else if ($action == 'edit_profile')
{
$data['view_file'] = 'views/profile.tpl.php';
$data['registration_status'] = $this->editProfile();
}
return $data;
}
}
从主前控制器:
$data = ControllerCommandFactory::execute($action);
if (!is_null($data)) { extract($data); }
/* We know the view_file is safe, since we explicitly set it above. */
require $view_file;
关键是每个Controllercommand类都有一个执行函数,并返回其视图和该视图的任何数据。
对于完整的MVC,您可以通过发送电子邮件至theodore [at] phpexperts.pro来访问开源应用程序。