0

私はある種独自のMVCフレームワークを作成しましたが、他のフレームワークがどのように「コントローラー」から「ビュー」にプロパティを送信できるかについて興味があります。$this->view->name = 'value';Zendは私のコードに沿って何かをします:

ファイル:services_hosting.php

class services_hosting extends controller {
    function __construct($sMvcName) {
        parent::__construct($sMvcName);

        $this->setViewSettings();
    }

    public function setViewSettings() {        
        $p = new property;
        $p->banner = '/path/to/banners/home.jpg';
    }
}

ファイル:controller.php

class controller  {
    public $sMvcName = "home";

    function __construct($sMvcName) {
        if ($sMvcName) {
            $this->sMvcName = $sMvcName;
        }

        include('path/to/views/view.phtml');
    }

    public function renderContent() {
        include('path/to/views/'.$this->sMvcName.'.phtml');
    }
}

ファイル:property.php

class property {

    private $data = array();
    protected static $_instance = null;

    public static function getInstance() {
        if (null === self::$_instance) {
            self::$_instance = new self();
        }

        return self::$_instance;
    }

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

    public function __get($name) {
        if (array_key_exists($name, $this->data)) {
            return $this->data[$name];
        }
    }

    public function __isset($name) {
        return isset($this->data[$name]);
    }

    public function __unset($name) {
        unset($this->data[$name]);
    }

}

私のservices_hosting.phtml「view」ファイルには次のものがあります。

<img src="<?php echo $this->p->banner ?>" />

これは機能しません。私は根本的に間違ったことをしていますか、それとも私の論理は間違っていますか?今はぐるぐる回っているようです。どんな助けでも大歓迎です。

4

3 に答える 3

0

これが機能するかどうかを確認できますか?

controller.phpで、ビューオブジェクトを作成します

 function __construct() {
    $this->view = new property();
}

今私たちのサービスホスティングコントローラーで

class services_hosting extends controller {
function __construct($sMvcName) {
    parent::__construct($sMvcName);

$this->view->banner = '/path/to/banners/home.jpg';
}

}

これで、バナー変数にビューファイルでアクセスできるようになります。

<img src="<?php echo $this->banner ?>" />

これがうまくいくことを願っています...

于 2012-11-09T06:25:30.453 に答える
0
    <img src="<?php echo $this->p->banner ?>" />

クラスのインスタンスにいることを意味します。あなたはその外部ファイルを言ったので、あなたはおそらく次の行に沿って何かを持っているでしょう

  $a = new services_hosting(); 

この場合、代わりに

 $this->banner;

あなたが持っているだろう

$a->banner;
于 2012-11-09T10:47:40.280 に答える
0

私のフロントコントローラーはこのように見えます

class front {

    private $sMvcName = 'home';

    function __construct() {
        $aUriParts = $this->getUriParts();

        if ($aUriParts[0]) {
            $this->sMvcName = implode("_", $aUriParts);   
        }

        $this->constructController();
    }

    private function constructController() {
        $this->view = new property();
        $sControllerName = $this->sMvcName;
        new $sControllerName($this->sMvcName);
    }

    private function getUriParts() {
        $sUri = $_SERVER['REQUEST_URI'];
        $sUri = trim($sUri, "/");
        $sUri = str_replace("-", "_", $sUri);
        $aUriParts = explode("/", $sUri);
        return $aUriParts;
    }

}

services_hosting.phpは次のようになります

class services_hosting extends controller {

    function __construct($sMvcName) {
        $this->setViewSettings();

        parent::__construct($sMvcName);
    }

    public function setViewSettings() {
        $this->view->banner = '/assets/images/banners/home_02.jpg';
    }

}
于 2012-11-09T21:25:14.047 に答える