许多使用 Laravel 的开发人员可能只触及了该框架所提供功能的皮毛。虽然文档确实涵盖了最常见的用例和明显的功能,但它并没有涵盖所有内容。
别误会我的意思,文档很好,只是您可以做的事情太多了,很难记录所有内容。因此,我们将看看 Laravel 中潜藏的一些隐藏的瑰宝。
级联视图
可用时间: v4.0.0
记录:否
视图能够像配置文件一样级联。在开发可扩展的主题系统时,级联视图非常有用。考虑以下目录结构。
/app
/views
/blog
/index.blade.php
/themes
/default
/views
/blog
/index.blade.php
/theme.blade.php
登录后复制
这个想法是,当我们 return View::make('theme::blog.index');
时,它会首先在 themes/default/views
目录中查找,如果找不到的话找到视图,回退到 app/views
。
为此,我们使用 View::addNamespace
在这两个位置注册我们自己的命名空间。
View::addNamespace('theme', [
base_path().'/themes/default/views',
app_path().'/views'
]);
登录后复制
集合
可用时间: v4.0.0
记录:部分
集合是与数组交互和管理数组的好方法。集合有多种方便的方法,并实现了许多有用的接口,例如 ArrayableInterface
、IteratorAggregate
和 JsonableInterface
。
假设我们正在构建一个使用平面文件进行存储的小型博客引擎。我们希望能够执行排序、过滤和分页等操作。
实现博客引擎超出了本文的范围,但假设我们有一个数组 $articles
,并且该数组的每个成员都是 Article
类的实例。然后我们需要做的就是获取 Collection
的新实例并为其提供我们的文章数组。
$articles = new IlluminateSupportCollection($arrayOfArticles);
登录后复制
排序
使用集合我们可以对文章进行排序。让我们对文章进行排序,并首先显示最近更新的文章。为了本文的目的,我们假设当从文件系统加载文章时,我们将 updatedAt
属性设置为文件的上次修改时间。
$articles->sortByDesc(function ($article) {
return $article->updatedAt;
});
登录后复制
sortBy
和 sortByDesc
方法接受回调,此回调应返回一个可用于对集合进行排序的值。在我们的例子中,我们可以简单地返回文章的最后修改时间,并且集合可以根据该时间进行排序。
过滤
与排序类似,我们也可以使用集合来过滤我们的文章,就像 MySQL 中的 WHERE
子句一样。让我们根据可能已运行的搜索来过滤我们的文章。