Php 访问在控制器中设置的视图phtml文件中的属性
我正在一个基于MVC的小型PHP网站上工作。我有一个前端控制器(Php 访问在控制器中设置的视图phtml文件中的属性,php,oop,model-view-controller,overloading,Php,Oop,Model View Controller,Overloading,我正在一个基于MVC的小型PHP网站上工作。我有一个前端控制器(front.php),它加载控制器(services.php),运行操作方法(hostingAction()),并包含html(view.phtml)。view.phtml($this->renderContent())中有一个方法调用,其中包括内部内容(hosting.phtml) 问题: 如何在hostingAction()方法中设置属性(例如$title='My title';),然后在view.phtml中设置属性 Zend
front.php
),它加载控制器(services.php
),运行操作方法(hostingAction()
),并包含html(view.phtml
)。view.phtml($this->renderContent()
)中有一个方法调用,其中包括内部内容(hosting.phtml
)
问题:
如何在hostingAction()
方法中设置属性(例如$title='My title';
),然后在view.phtml中设置属性
Zend框架的功能类似于$this->view->title='My title'在控制器中,然后在视图中执行类似于
的操作
目前我正在重载属性。我正在设法在控制器操作中设置属性,但无法在视图中访问它们。我做错了什么
示例代码:
front.php
class front {
private $view;
function __construct() {
$this->view = new viewProperties();
$this->constructController();
include('application/views/view.phtml');
}
private function constructController() {
$c = new services();
$this->doAction($c);
}
public function renderContent() {
include('application/views/services/hosting.php');
}
private function doAction($c) {
$c->hostingAction();
}
}
services.php
class services {
public function hostingAction() {
$this->view->page_title = 'Services - Hosting';
$this->view->banner_src = '/assets/images/banners/home_02.jpg';
$this->view->banner_title = 'reload';
}
}
viewProperties.php
class viewProperties {
private $data = array ();
public function __set($name, $value) {
$this->data[$name] = $value;
}
public function __get($name) {
if (array_key_exists($name, $this->data)) {
return $this->data[$name];
}
}
}
view.phtml
<html>
<head>
<title><?php echo $this->view->page_title; ?></title>
</head>
<body>
<?php $this->renderContent() ?>
</body>
</html>
hosting.phtml
<div id="banner">
<img src="<?php echo $this->view->banner_src ?>" alt="<?php echo $this->view->banner_title ?>" />
</div>
查看->横幅\u src?>“alt=”“/>
您的服务
对象无权访问$view
试试这些MOD:
front.php(带setter)
services.php(带setter)
使用单例
此外,您还可以将viewProperties设置为单例(根据您的评论):
视图属性(带单例)
前部(带单体)
services.php(带单例)
使用多维变量
最后,关于你使用“banner\u src”和“banner\u title”,你可以使用我在你的原始帖子中提到的方法,它的伸缩性更好
注意下面的示例是从我的回复中复制到您的原始帖子中的,尚未修复以匹配您的新代码。它显示您可以存储多维数据的数组(),并显示如何从视图中访问它们
class services extends controller {
public function indexAction() {
$this->view->banner = array
(
'src' => '/path/to/images/banners/home_02.jpg',
'alt' => 'banner title'
);
}
public function hostingAction() {
$this->view->banner = array
(
'src' => '/path/to/images/banners/home_02.jpg',
'alt' => 'banner title'
);
}
}
<img src="<?php echo $this->view->banner['src'] ?>" alt="<?php echo $this->view->banner['title'] ?>" />
类服务扩展控制器{
公共函数索引(){
$this->view->banner=数组
(
“src'=>”/path/to/images/banners/home_02.jpg',
“alt”=>“横幅标题”
);
}
公共函数hostingAction(){
$this->view->banner=数组
(
“src'=>”/path/to/images/banners/home_02.jpg',
“alt”=>“横幅标题”
);
}
}
查看->横幅['src']?>“alt=”“/>
您的服务
对象无权访问$view
试试这些MOD:
front.php(带setter)
services.php(带setter)
使用单例
此外,您还可以将viewProperties设置为单例(根据您的评论):
视图属性(带单例)
前部(带单体)
services.php(带单例)
使用多维变量
最后,关于你使用“banner\u src”和“banner\u title”,你可以使用我在你的原始帖子中提到的方法,它的伸缩性更好
注意下面的示例是从我的回复中复制到您原来的帖子中的,尚未修复以匹配您的新代码。它显示了您可以为多维数据存储数组(),并显示了如何从视图中访问它们
class services extends controller {
public function indexAction() {
$this->view->banner = array
(
'src' => '/path/to/images/banners/home_02.jpg',
'alt' => 'banner title'
);
}
public function hostingAction() {
$this->view->banner = array
(
'src' => '/path/to/images/banners/home_02.jpg',
'alt' => 'banner title'
);
}
}
<img src="<?php echo $this->view->banner['src'] ?>" alt="<?php echo $this->view->banner['title'] ?>" />
类服务扩展控制器{
公共函数索引(){
$this->view->banner=数组
(
“src'=>”/path/to/images/banners/home_02.jpg',
“alt”=>“横幅标题”
);
}
公共函数hostingAction(){
$this->view->banner=数组
(
“src'=>”/path/to/images/banners/home_02.jpg',
“alt”=>“横幅标题”
);
}
}
查看->横幅['src']?>“alt=”“/>
谢谢!这似乎很管用。不过有一个问题。与其将$view
传递给服务
,我是否可以(在服务
中)查看viewProperties的实例是否存在并获取该实例?是的,您可以将viewProperties设置为单例-我已经用一个示例更新了我的答案(未经测试,因此避免任何语法错误)。此外,请务必“接受”我的答案,因为它起到了作用:)谢谢!谢谢!这似乎起到了作用。不过有一个问题。与其将$view
传递给服务
,我能不能(在服务中
)查看是否存在viewProperties的实例并获取该实例?是的,您可以将viewProperties设置为单例-我已使用一个示例更新了我的答案(未经测试,因此不会出现任何语法错误)。此外,请确保“接受”我的答案,因为它起到了作用:)谢谢!
class viewProperties {
private $instance = null;
private function __construct() {}
public static function getInstance() {
if (null === $this->instance) {
$this->instance = new self();
}
return $this->view;
}
}
class front {
private $view;
function __construct() {
$this->view = viewProperties::getInstance();
$this->constructController();
include('application/views/view.phtml');
}
}
class services {
private $view;
function __construct() {
$view = viewProperties::getInstance();
}
public function hostingAction() {
$this->view->page_title = 'Services - Hosting';
$this->view->banner_src = '/assets/images/banners/home_02.jpg';
$this->view->banner_title = 'reload';
}
}
class services extends controller {
public function indexAction() {
$this->view->banner = array
(
'src' => '/path/to/images/banners/home_02.jpg',
'alt' => 'banner title'
);
}
public function hostingAction() {
$this->view->banner = array
(
'src' => '/path/to/images/banners/home_02.jpg',
'alt' => 'banner title'
);
}
}
<img src="<?php echo $this->view->banner['src'] ?>" alt="<?php echo $this->view->banner['title'] ?>" />