【问题标题】:Laravel: Passing custom URLs with both ID and slug to the viewLaravel:将带有 ID 和 slug 的自定义 URL 传递给视图
【发布时间】:2014-08-29 22:25:27
【问题描述】:

我的文章 URL 包含 ID 和 slug,格式如下:/articles/ID/slug。只有 ID 用于记录查找,slug 仅用于 SEO,不存储在数据库中。

目前我在我看来(在 foreach 循环内)这样做:

$url = URL::route('articles.show', array('id' => $article->id, 'slug' => Str::slug($article->title)));

要生成完整的 URL,例如:articles/1/accusamus-quos-et-facilis-quia,但是; 我不想在视图中这样做。我想在控制器中执行它并将其传递给视图,但我不知道如何。

编辑:我将一组多篇文章从控制器传递到视图,所有文章都有唯一的 URL,具体取决于它们各自的 ID 和 slug。

【问题讨论】:

  • 有什么问题?你不是已经将 $article 传递给你的控制器了吗?你不能在控制器中创建那个 url 并使用 with('url', $url) 传递它吗?
  • 忘了提一下:我正在将一组文章传递给视图,我想我可以枚举它们并构建一组 URL 并传递它。看起来有点脏,我希望有某种方法可以用框架做这样的事情。

标签: php laravel-4


【解决方案1】:

执行此类操作的最佳方法是使用视图演示器:

{{ $article->present()->url() }}

在你的演示者中:

public function url()
{
    URL::route('articles.show', array('id' => $this->id, 'slug' => Str::slug($this->title)));
}

但您可以在模型中创建访问器:

public function getUrlAttribute() 
{
    URL::route('articles.show', array('id' => $this->id, 'slug' => Str::slug($this->title)));
}

并用作:

{{ $article->url }}

【讨论】:

  • 我在我的模型中添加了一个访问器,谢谢先生!这正是我一直在寻找的:)“视图演示者”一词对我来说是新的,我必须阅读它。
  • 已加星标!再次感谢,这看起来很有趣。我绝对认为这在许多情况下都很有用:)
  • 每次您需要对需要在视图中显示的内容进行某种修改/格式化/计算时,都应该在演示者中进行。 :)
  • 我选择了演示者解决方案,更简洁:) 但是URL::route 之前不应该有return 吗?没有它我似乎无法让它工作......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
  • 2015-05-12
相关资源
最近更新 更多