Zend framework2 向路由添加参数的事件
是否可以连接(理想情况下在控制器中)以向路由添加附加参数 我知道这听起来不清楚,乍一看可能听起来很可笑——因为要到达控制器,我们必须有路由。但我只想更改默认变量 我将尝试解释我想要实现的目标: 配置:Zend framework2 向路由添加参数的事件,zend-framework2,Zend Framework2,是否可以连接(理想情况下在控制器中)以向路由添加附加参数 我知道这听起来不清楚,乍一看可能听起来很可笑——因为要到达控制器,我们必须有路由。但我只想更改默认变量 我将尝试解释我想要实现的目标: 配置: return [ 'router' => [ 'routes' => [ 'some' => [ 'type' => 'Zend\Mvc\Router\Http\Segment',
return [
'router' => [
'routes' => [
'some' => [
'type' => 'Zend\Mvc\Router\Http\Segment',
'options' => [
'route' => '/some/:project',
'defaults' => [
'__NAMESPACE__' => 'Some\Controller',
'controller' => 'Some\Controller\Some',
'action' => 'some',
'extra' => 'default-value'
],
],
]
]
]
];
控制器:
class SomeController extends AbstractActionController {
protected $project = null;
public function setEventManager(EventManagerInterface $events)
{
parent::setEventManager($events);
$controller = $this;
$events->attach(
'dispatch', function (\Zend\Mvc\MvcEvent $e) use ($controller) {
$params = $e->getRouteMatch()->getParams();
$this->project = $params['project'] ;
// and there should be something that I want to
// achieve but do not know how (and if it is possible)
if ($this->project == 1) {
// magic action which modify config default param
// "extra" from "default-value" to "changed-value"
}
return;
}, 50
);
}
protected function attachDefaultListeners()
{
parent::attachDefaultListeners();
$eventManager = $this->getEventManager();
$eventManager->attach(
\Zend\Mvc\MvcEvent::EVENT_DISPATCH,
function(\Zend\Mvc\MvcEvent $event) {
$ViewModel = $event->getResult();
if ($ViewModel instanceof \Zend\View\Model\ViewModel) {
$ViewModel->setVariable('project',$this->project);
}
},
-99);
}
public function someAction() {
echo $this->params()->fromRoute("extra"); // return "default-value";
// but i want
echo $this->params()->fromRoute("extra"); // return "changed-value";
return new ViewModel();
}
}
看法
是否确实要更改默认值参数
if ($this->project == 1) {
$e->getRouteMatch()->setParam('extra', 'changed-value');
}
可以全局设置装配的默认参数:
$serviceLocator->get('router')->setDefaultParam('extra', 'changed-value');
无法更改Zend\Mvc\Router\Http\Segment的默认属性
如果您真的需要它,您必须扩展这个类(但我不建议这样做,因为我认为您的方法已经错了)我知道这有点奇怪,但就在我的项目中,在某些情况下默认值由前面的参数生成的结果。不漂亮但很舒服。这一改变缩短了我的代码。
$serviceLocator->get('router')->setDefaultParam('extra', 'changed-value');