Phalcon使用get参数创建Link

时间:2014-04-13 22:50:40

标签: hyperlink query-string phalcon volt

是否有phalcon(伏特)中的辅助函数来创建具有GET参数的路径的链接?我有想要添加的分页链接?cat = category和?year = year,具体取决于它们是否已设置。

<a href="{{ url.getBaseUri() }}tags/{{ tagname.tag }}">First</a>
<a href="{{ url.getBaseUri() }}tags/{{ tagname.tag }}?page=<?= $page->before; ?>">Previous</a>
<a href="{{ url.getBaseUri() }}tags/{{ tagname.tag }}?page=<?= $page->next; ?>">Next</a>
<a href="{{ url.getBaseUri() }}tags/{{ tagname.tag }}?page=<?= $page->last; ?>">Last</a>

这样

http://site.tld/tags/xyz?page=2

会变成:

http://site.tld/tags/xyz?cat=a&year=b&page=2

或者,如果cat未设置或为null:

http://site.tld/tags/xyz?year=b&page=2

修改

这种方式似乎有效:

<a href="{{ pagingurl ~ page.first }}">First</a>
<a href="{{ pagingurl ~ page.before }}">Previous</a>
<a href="{{ pagingurl ~ page.next }}">Next</a>
<a href="{{ pagingurl ~ page.last }}">Last</a>

其余部分发生在控制器

1 个答案:

答案 0 :(得分:1)

IMO在控制器中比使用伏特更容易做到这一点。 首先,使用URL Service

为您的分页链接生成基本网址
$pagingUrl = $this->url->get('tags/' . $tagname->tag);

现在你可以得到“猫”了。和&#39;年&#39;使用$this->request->getPost('cat');之类的内容来检查它是否已设置并将其作为GET参数附加到$pagingUrl。留下&#39;&amp; page =&#39;在$pagingUrl的末尾,以便以后轻松附加页码。

$page$pagingUrl设置为视图的变量,以便您可以从伏特轻松访问它:

$this->view->setVar('page', $page);
$this->view->setVar('pagingUrl', $pagingUrl);

最后在视图中你可以使用类似的东西:

{{ link_to(pagingUrl ~ '1', 'First') }}
{{ link_to(pagingUrl ~ page.before, 'Previous') }}
{{ link_to(pagingUrl ~ page.next, 'Next') }}
{{ link_to(pagingUrl ~ page.last, 'Last') }}

修改

上述解决方案似乎很苛刻,因为Phalcon设计人员的目标是使用clean URLs而不是显式GET参数。如果您以这种方式传递参数,那么TagController可能会有一个支持分页的操作:

class TagController
{
  ...
  public function ListAction($page = 1, $category = 'default-cat', $year = 1997)
  {
    ...

以这种方式工作,您可以轻松创建如下链接:

  • tags/list
  • tags/list/2/stuff
  • tags/list/9/stuff/2014