我在zf2中有以下链接
<a href="<?php echo $this->url('application/default',array('controller'=> 'enquiries', 'action'=>'index')) ?>"><?php echo $this->translate('Enquiries') ?></a>
和zf2中的此路由器
'application' => array(
'type' => 'Literal',
'options' => array(
'route' => '/application',
'defaults' => array(
'__NAMESPACE__' => 'Application\Controller',
'controller' => 'Index',
'action' => 'index',
),
),
'may_terminate' => true,
'child_routes' => array(
'default' => array(
'type' => 'Segment',
'options' => array(
'route' => '/[:controller[/:action]]',
'constraints' => array(
'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
),
'defaults' => array(
),
),
),
),
),
将上述链接转换为
<a href="/application/enquiries/index">Enquiries</a>
哪个好。
我正在使用angularjs,它使用锚片段很多。 如何在zf2链接url上添加achor“#/ active”,这样目标url看起来就像这样。
<a href="/application/bookingenquiries/index#/active">Active Enquiries</a>
答案 0 :(得分:3)
你有没有理由不在网址定义 url(...).'#/active'
之后手动添加锚点?
如果有,请试试这个:
'route' => '/[:controller[/:action[#/:anchor]]]',
击> <击> 撞击> UPDATE:
我检查了路由器和uri和url的源代码,似乎url视图助手接受第三个选项的'fragment'
键,所以试试这个:
url('[route]',array([params]),array('fragment'=>'/active'));
答案 1 :(得分:0)
通过扩展Url
创建以下视图助手namespace Application\View\Helper;
use Zend\View\Helper\Url;
class MyUrl extends Url {
public function __invoke($name = null, $params = array(), $options = array(), $reuseMatchedParams = false) {
if (isset($params['anchor']) && !empty($params['anchor'])) {
$anchor = $params['anchor'];
unset($params['anchor']);
} else {
$anchor = '';
}
$link = parent::__invoke($name, $params, $options, $reuseMatchedParams);
return $link . $anchor;
}
}
在模块文件中,在工厂中添加以下内容以添加新创建的帮助程序
public function getViewHelperConfig() {
return array(
'factories' => array(
'myUrl' => function($sm) {
$locator = $sm->getServiceLocator();
$helper = new \Application\View\Helper\MyUrl;
$router = \Zend\Console\Console::isConsole() ? 'HttpRouter' : 'Router';
$helper->setRouter($locator->get($router));
$match = $locator->get('application')
->getMvcEvent()
->getRouteMatch();
if ($match instanceof RouteMatch) {
$helper->setRouteMatch($match);
}
return $helper;
},
),
);
}
在URL中添加锚点作为参数
<a href="<?php echo $this->myUrl('application/default',array('controller'=> 'enquiries', 'action'=>'index', 'anchor'=>'#/active')) ?>"><?php echo $this->translate('Enquiries') ?></a>