我有自定义路由器,我必须访问Zend\Navigation
这个自定义路由器内部。我在谷歌上搜索、询问和搜索,但没有结果:/
我只需要在 Alias::match 函数中使用 Zend\Navigation 找到具有“链接”参数的节点。
这是我的module.config.php:
'navigation' => array(
'default' => array(
'account' => array(
'label' => 'Account',
'route' => 'node',
'pages' => array(
'home' => array(
'label' => 'Dashboard',
'route' => 'node',
'params' => array(
'id' => '1',
'link' => '/about/gallery'
),
),
),
),
),
),
[...]
这是我的别名课程:
// file within ModuleName/src/ModuleName/Router/Alias.php
namespace Application\Router;
use Traversable;
use Zend\Mvc\Router\Exception;
use Zend\Stdlib\ArrayUtils;
use Zend\Stdlib\RequestInterface as Request;
use Zend\Mvc\Router\Http;
use Zend\ServiceManager\ServiceLocatorAwareInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
class Alias extends Http\Segment implements ServiceLocatorAwareInterface
{
public function setServiceLocator(ServiceLocatorInterface $serviceLocator)
{
$this->serviceLocator = $serviceLocator;
return $this;
}
public function getServiceLocator()
{
return $this->serviceLocator;
}
public function match(Request $request, $pathOffset = null)
{
[...]
return parent::match($request, $pathOffset);
}
}
编辑:
现在我知道我应该将服务管理器注入我的自定义路由器。如果你知道怎么做,请告诉我:)
编辑:
好的,它不是自定义路由器,而是路由。我的错。我在谈论#zftalk
irc chanell 和AliasSegment
class should implements ServiceLocatorAwareInterface
。好的,我已经尝试过了,但现在还有另一个问题。
在setServiceLocator
功能上我无法获得service locator
。它返回 null 对象,但是$serviceLocator
是 class Zend\Mvc\Router\RoutePluginManager
。
public function setServiceLocator(ServiceLocatorInterface $serviceLocator){
$sl = $serviceLocator->getServiceLocator();
var_dump($sl); // NULL
}
任何想法如何从中获得 Zend 导航?
已编辑
与@mmmshuddup 所说的相对应,我已经更改了我的自定义路由器类。(上面是新版本)。同样在我的Module.php
,onBootstrap
函数内,我添加了这一行:
$sm->setFactory('Navigation', 'Zend\Navigation\Service\DefaultNavigationFactory', true);
导航有效并且之前已实例化,route
因此它应该在我的 Alias 类中可见,但事实并非如此。
我match
在课堂上的函数中加入了Alias
这一行:
$servicesArray = $this->getServiceLocator()->getRegisteredServices();
而且$servicesArray
几乎是空的。没有服务,没有工厂。onBootstrap
在设置新工厂(如上)之后插入的同一行返回数组navigation
和其他服务。
问题是:我如何与我的自定义路由器共享这个阵列(或 ServiceManager)Alias
:?
我不得不说,我想做的一切在 ZF1 中都是可能的,而且非常简单。
编辑
我找到了解决方案。答案如下