给定一个页面,例如:
http://myapp.dev/path/subfolder?param=abc
每当存在名为 param 的附加GET参数时,它应自动添加到我的导航中的所有后续链接中,如.volt模板中构造的那样。例如:
<a href="{{ url('path/subfolder2') }}">Go to subfolder 2</a>
即。基于此.volt链接,目标是生成:
<a href="http://myapp.dev/path/subfolder2?param=abc">Go to subfolder 2</a>
答案 0 :(得分:0)
如果您只想为给定的链接附加查询字符串参数,您可以使用Luke的解决方案。 但是我认为你想要实现一些不同的东西,它涉及自定义逻辑。为此,我们应该创建一个自定义Volt函数。
public static function urlFor($params, $queryStringParams = [])
{
$di = \Phalcon\DI::getDefault();
if ($di->getRequest()->has('param')) {
$queryStringParams['param'] = $di->getRequest()->get('param');
}
return $di->getUrl()->get($params, $queryStringParams);
}
上述函数与Phalcon中的url()
函数的作用相同,它只允许我们在将参数传递给url()
之前编写一些自定义逻辑。
在您的情况下,我们检查URL是否包含所需的查询参数,并将其添加到当前请求中生成的每个URL。在我的情况下,上面的函数在Helper文件中,所以我可以在任何需要的地方使用它。
$di->set('view', function() use ($di) {
$view = new \Phalcon\Mvc\View();
...
$view->registerEngines([
'.phtml' => function($view, $di) {
$volt = new \Phalcon\Mvc\View\Engine\Volt($view, $di);
$options = [
'compiledPath' => $di->getConfig()->site->path->cache . 'volt/frontend/',
'compiledExtension' => '.php',
'compileAlways' => $di->getConfig()->debug,
];
$volt->setOptions($options);
...
// IMPORTANT PART: Overwriting default url() function in Volt
$compiler = $volt->getCompiler();
$compiler->addFunction('url', function($resolvedArgs, $exprArgs){
return 'Helpers\Common::urlFor(' . $resolvedArgs . ')';
});
return $volt;
}
]);
return $view;
});
请注意上述代码块中的重要部分注释。
用户在此地址: http://myapp.dev/path/subfolder?param=abc
但是在代码中的某处,您希望生成指向新闻页面的链接:
<a href="{{ url('news/list') }}">News</a>
我们的代码将捕获URL中的param
并生成以下地址: