zf2 URL Helper自定义为angularjs路由器添加achnor

时间:2014-03-03 18:24:38

标签: angularjs zend-framework2

我在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>

2 个答案:

答案 0 :(得分:3)

你有没有理由不在网址定义url(...).'#/active'之后手动添加锚点?

如果有,请试试这个:

'route' => '/[:controller[/:action[#/:anchor]]]',

<击> UPDATE:

我检查了路由器和uri和url的源代码,似乎url视图助手接受第三个选项的'fragment'键,所以试试这个:

url('[route]',array([params]),array('fragment'=>'/active'));

Zend/View/Helper/Url

Zend/Mvc/Router/Http/TreeRouteStack

Zend/Uri/Uri

答案 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>