1

ViewHelper に複数の関数を追加したいと考えています。通常、クラスとファイル名のような名前の関数が 1 つあります。

複数の関数を 1 つの ViewHelper に追加するにはどうすればよいですか?

たとえば、次のようにします。

class Zend_View_Helper_MyMenuHelper extends Zend_View_Helper_Abstract
{
    public function Horizontal($parameter)
    {
         return "...";
    }
}

echo $this->MyMenuHelper()->Horizontal($parameter);

4

3 に答える 3

3

アレックスは正しい道を進んでいましたが、彼の答えに何かが欠けていました。myMenuHelper()これが機能するには、実際のメソッドはビューヘルパー自体を返す必要があります。

class Zend_View_Helper_MyMenuHelper extends Zend_View_Helper_Abstract
{
    public function myMenuHelper()
    {
        return $this;
    }

    public function horizontal() { ... }

    // more methods...
}

そして、前述のように:

echo $this->myMenuHelper()->horizontal();
于 2012-01-25T11:58:26.363 に答える
3

ビュー ヘルパーのメイン メソッドを通過させたくない場合もありますが、一部のロジックにとってはそれほど悪くはありません。その場合、次を使用しますgetHelper()

class Zend_View_Helper_MyMenuHelper extends Zend_View_Helper_Abstract
{
    public function myMenuHelper()
    {
        // some logic, maybe the main one
    }

    public function horizontal() 
    {    
        // some other logic
    }
}

myMenuHelper()次の例では、完全 にバイパスします。

// in controller
$this->view->getHelper('MyMenuHelper')->horizontal();

// in view
$this->getHelper('MyMenuHelper')->horizontal();`

たとえば、場合によっては、ビュー ヘルパーにcontroller 内の内部データを入力し、そのデータに作用するビュー内でメイン メソッドを直接呼び出します。

// in controller
$this->view->getHelper('MyMenuHelper')->storeData($someArray);

// in view
$this->myMenuHelper(); // iterates over $someArray
于 2012-01-28T14:49:21.533 に答える
0

関数名を小文字で始めてみてください

        class Zend_View_Helper_MyMenuHelper extends Zend_View_Helper_Abstract
        {
                public function horizontal($parameter)
                {
                       return "...";
                }
        }

ビューで:

        echo $this->myMenuHelper()->horizontal($parameter);
于 2011-12-08T19:52:27.003 に答える