1


0

古いレガシーブートストラップでビューにZend_Navigationを追加します

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

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

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

//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);

これはうまくいくように見えますが、レイアウトでブレッドクラムビューヘルパーを使用すると、次のエラーが表示されます。 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オブジェクトがビューにないためだと思います。

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

ありがとう、

付与

1 Answer


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;
}