0

私はZend_Viewと、ビューを構成するさまざまなクラスとインターフェースに注いでいます。形や形を問わずzendを使用しないプロジェクトで複製しようとしていることの1つは、次のとおりです。

$this->view->variable = 'Hello world';

コントローラに設定してから、次のことを実行できます。

echo $this->view->variable;

私の最終的な目標は、次のようなことをすることです。

$this->variable = new SomeClass

次に、具体的には、次のことを行います。

$this->variable->someMethod();

私の質問は:

  • グローバル変数を使用せずに、同様のことを行うためにzendが行うことをどのように複製しますか?
  • zendは、ビューをインスタンス化したり、ビューとは何かを言ったりせずに、$ this-> viewのようなことをどのように実行できますか?

これは、変数がどのように渡されるか、オブジェクトがロジックからビューに渡されるか、およびphpがビュー内にあるかどうかにかかわらず$this->viewのようなものをどのように機能させるかを理解するのに役立ちます。

:これはZend固有の質問ではなく、「zendを使用する」は答えではありません。特定の機能を複製したいと思っています。私のプロジェクトは、zendを使用したり提携したりしていません。

4

2 に答える 2

1

なぜこれを達成したいのか正確にはわかりませんが、非常に単純なセットアップ(MVCフレームワークの基礎には決して適していません)として、これを見ることができます:

<?php
class Controller
{
    private $view = null;

    public function __construct()
    {
        $this->view = new View();
        $this->view->someVar = "foobar";
    }

    public function render()
    {
        include "view.php";
    }
}

class View
{

}

$controller = new Controller();
$controller->render();

そして、view.php で次のことができます。

<?php
echo $this->view->someVar;

注意: このコードは、そのような構造を実現する方法を示しているだけで、まったく役に立ちません;)。

于 2012-11-11T20:59:59.527 に答える
0

それは実際には非常に簡単です。、、などを使用するincluderequireevalロードされたコードが現在のスコープに取り込まれます。テンプレートファイルがある場合

template.php

<span><?=$this->view->somevar?></span>

Controller.php

<?php
class Controller
{
    private $view;

    public function doSomething()
    {
        $this->view->somevar = 'Hello World';
        include 'template.php';
    }
}

index.php

<?php
require 'Controller.php';
$oC = new Controller();
$oC->doSomething();

Blamo..、template.php は$this->view->somevarController.php の一部として扱われるため、呼び出すことができます。php index.phpCLI で実行すると生成されます

<span>Hello World</span>

少し詳しく説明すると、 Controller.php の内部が、上記のデモのよう$this->viewな単純なインスタンスではなく、定義したクラスであり、それが function を持っている場合、 template.php からまったく同じように呼び出すことができます。stdClasssomeMethod$this->view->someMethod()

于 2012-11-11T21:03:12.130 に答える