1

私は週末中ずっとZend_Navigationに苦労していましたが、今は別の問題があり、それが私の多くの問題の原因であると信じています。

Zend_Navigationをレガシー1.7.6ZendFrameworkアプリケーションに追加しようとしています。Zendライブラリを1.9.0に更新し、このライブラリを更新できるようにブートストラップを更新しました。

問題は、方法がわからないことです。例では、Navigationオブジェクトをビューに追加する方法の新しいブートストラップメソッドを示しています。これを試しました。

//initialise the application layouts with the MVC helpers
$layout = Zend_Layout::startMvc(array('layoutPath' => '../application/layouts'));

$view = $layout->getView();
$configNav = new Zend_Config_Xml('../application/config/navigation.xml', 'navigation');
$navigation = new Zend_Navigation($configNav);
$view->navigation($navigation);
$viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer();
$viewRenderer->setView($view); 

これは問題なく実行されているようですが、レイアウトでブレッドクラムビューヘルパーを使用すると、次のエラーが発生します。厳密な標準:C:\ www \ moobia \ development \ website \ application \modules\の空の値からデフォルトオブジェクトを作成する27行目のemployers\controllers \ IndexController.php

これは、コントローラーのinit()関数の次のコードが原因で発生します。

$uri = $this->_request->getPathInfo();
$activeNav = $this->view->navigation()->findByUri($uri); <- this is null when called
$activeNav->active = true;

Zend_Navigationオブジェクトがビューにないためだと思います。

ブートストラップを現在のメソッドに移行することを検討しますが、現在、リリースの時間が不足しています。

ありがとう、

許す

4

1 に答える 1

2

まず、Zend_Navigation がビューにないという疑いが正しいかどうかを判断する必要があります。これを行う最も簡単な方法は、次を追加することです。

var_dump($this->view->navigation());exit;

コントローラーのinit()に。Zend_Navigation オブジェクトが存在する場合、これを返す必要があります。

そこにない場合、Zend_Navigation オブジェクトを提供する別の方法は、レジストリを使用することです。これはより簡単な場合があります。これを行うには、ブートストラップからビューのものを削除して、次のようにします。

$configNav = new Zend_Config_Xml('../application/config/navigation.xml', 'navigation');
$navigation = new Zend_Navigation($configNav);
Zend_Registry::set('Zend_Navigation', $navigation);

コントローラーの init() は、Zend Navigation オブジェクトがまだない場合、ビュー オブジェクトがレジストリを参照するのと同じままです。

ただし、コントローラーの init() コードが希望どおりに機能するかどうかはわかりません。findByUri() は Mvc ページでは機能しないと思います (ただし、私は間違っている可能性があります)。以前の質問から、XML ファイル内のほとんどのページが Mvc ページのように見えました。Mvc クラスには、同等のように見える「href」プロパティがあります。XML ファイルに両方のページ タイプが含まれている場合は、両方をチェックする必要があるかもしれないので、次のようにすることをお勧めします。

$uri = $this->_request->getPathInfo();
if (($activeNav = $this->view->navigation()->findByHref($uri)) !== null) {
    $activeNav->active = true;
} else if (($activeNav = $this->view->navigation()->findByUri($uri)) !== null) {
    $activeNav->active = true;
}
于 2010-04-02T15:48:31.327 に答える