Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 访问在控制器中设置的视图phtml文件中的属性_Php_Oop_Model View Controller_Overloading - Fatal编程技术网

Php 访问在控制器中设置的视图phtml文件中的属性

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

我正在一个基于MVC的小型PHP网站上工作。我有一个前端控制器(
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'] ?>" />