Laravel을 사용하는 많은 개발자는 프레임워크가 제공하는 기능의 표면적인 부분에 대해서만 접했을 수도 있습니다. 문서는 가장 일반적인 사용 사례와 확실한 기능을 다루지만 모든 것을 다루지는 않습니다.
오해하지 마세요. 문서는 훌륭합니다. 단지 할 수 있는 일이 너무 많아서 모든 것을 문서화하기가 어렵다는 것뿐입니다. 그래서 우리는 Laravel에 숨어 있는 몇 가지 숨겨진 보석을 살펴보겠습니다.
사용 가능 시간: v4.0.0
기록: 아니요
뷰는 구성 파일처럼 계단식으로 배열될 수 있습니다. 계단식 보기는 확장 가능한 테마 시스템을 개발할 때 매우 유용합니다. 다음 디렉터리 구조를 고려하세요.
으아아아아이디어는 우리가 return View::make('theme::blog.index');
时,它会首先在 themes/default/views
目录中查找,如果找不到的话找到视图,回退到 app/views
할 때입니다.
이를 위해 View::addNamespace
를 사용하여 두 위치 모두에 자체 네임스페이스를 등록합니다.
사용 가능 시간: v4.0.0
기록: 부분
컬렉션은 배열과 상호 작용하고 관리하는 좋은 방법입니다. 컬렉션에는 다양한 편의 메서드가 있으며 ArrayableInterface
、IteratorAggregate
和 JsonableInterface
와 같은 유용한 인터페이스를 많이 구현합니다.
플랫 파일을 저장용으로 사용하는 작은 블로그 엔진을 구축한다고 가정해 보겠습니다. 우리는 정렬, 필터링, 페이징과 같은 작업을 수행할 수 있기를 원합니다.
블로그 엔진 구현은 이 기사의 범위를 벗어나지만 배열의 새 인스턴스가 있고$articles
,并且该数组的每个成员都是 Article
类的实例。然后我们需要做的就是获取 Collection
이를 게시물 배열과 함께 제공한다고 가정합니다.
컬렉션을 사용하여 기사를 정렬할 수 있습니다. 기사를 정렬하고 가장 최근에 업데이트된 기사를 먼저 표시해 보겠습니다. 이 기사에서는 파일 시스템에서 기사를 로드할 때 updatedAt
속성을 파일의 마지막 수정 시간으로 설정한다고 가정합니다.
sortBy
和 sortByDesc
메서드는 컬렉션을 정렬하는 데 사용할 수 있는 값을 반환해야 하는 콜백을 허용합니다. 우리의 경우 기사의 마지막 수정 시간을 간단히 반환할 수 있으며 해당 시간을 기준으로 컬렉션을 정렬할 수 있습니다.
정렬과 마찬가지로 MySQL의 WHERE
절과 마찬가지로 컬렉션을 사용하여 기사를 필터링할 수도 있습니다. 실행되었을 수 있는 검색을 기반으로 기사를 필터링해 보겠습니다.
filter
方法实际上返回 IlluminateSupportCollection
的新实例,因此我们需要将其分配给 $results
변수. 이 새로운 컬렉션에는 "Laravel rock!"을 언급하는 기사만 포함됩니다.
이 컬렉션을 사용하면 단일 페이지에 기사가 너무 많지 않도록 기사의 페이지를 매길 수 있습니다.
으아아아변수를 slice
方法,我们提取集合中的一部分文章并将其分配给 $results
사용하세요.
이 예제는 Laravel의 Paginator
클래스의 새 인스턴스를 생성하여 추가로 구현할 수 있습니다. 이렇게 하면 모든 페이지 번호와 링크가 생성될 수 있습니다.
임의의 기사를 얻을 수 있습니다:
으아아아기사 컬렉션을 일반 배열인 것처럼 반복할 수도 있습니다. 이것은 모두 IteratorAggregate
和 ArrayIterator
인터페이스 덕분입니다.
기사를 일반 배열이나 JSON 표현으로 변환할 수도 있습니다.
으아아아가장 멋진 방법 중 하나는 아마도 groupBy
일 것인데, 이를 통해 특정 키를 기준으로 기사를 그룹화할 수 있습니다. 각 기사 상단에 구문 분석되어 기사 본문에서 제거되는 일부 메타데이터가 있다고 가정해 보세요.
이 메타데이터의 구문 분석은 이 기사의 범위를 벗어나지만 우리는 그것이 구문 분석되고 Article
인스턴스의 속성이라고 가정합니다. 그런 다음 Article
实例上的属性。然后,您可以使用 groupBy
를 사용하여 기사가 게시된 카테고리별로 기사를 그룹화할 수 있습니다.
동일한 카테고리를 공유하는 모든 글은 그룹화됩니다. 그런 다음 특정 카테고리의 기사를 얻을 수 있습니다.
으아아아컬렉션은 Laravel이 제공하는 최고의 숨겨진 보석 중 하나입니다.
이용 시간: v4.1.19
기록: 아니요
Laravel의 경로 필터링은 많은 프로젝트에서 수행하는 일반적인 작업입니다. 필터를 사용하면 경로가 트리거되기 전이나 후에 사용자 인증이나 속도 제한과 같은 작업을 수행할 수 있습니다. Route::filter
创建过滤器,并可以将它们应用于单个路由、路由组,或者使用 Route::when
를 사용하여 일치하는 패턴에 적용합니다.
Route::filter('restricted', function($route, $request, $group) { // Restrict user access based on the value of $group }); Route::when('admin/*', 'restricted:admin');
在此示例中,我们创建一个 restricted
过滤器,它需要一个参数 $group
。 $route
和 $request
参数始终提供给 before 过滤器。
但是如果我们想要更大的灵活性怎么办?假设我们想要将过滤器应用于所有 admin
路由除了 admin/login
。我们可以使用路线组并将相关路线移至组外。或者我们可以使用 Route::whenRegex
并编写我们自己的正则表达式。
Route::whenRegex('/^admin(\/(?!login)\S+)?$/', 'restricted:admin');
此正则表达式只是确保它仅适用于以 admin
开头且后面不跟 /login
的路由,但后面可以跟任何其他内容。出色的。现在,我们将 restricted:admin
过滤器应用于除 admin/login
路由之外的所有路由。
可用时间: v4.0.0
记录:部分
毫无疑问,您已经使用 Illuminate\Support\MessageBag
一段时间了,甚至没有意识到。 MessageBag
扮演的最大角色是在使用 Laravel 内置验证器时包含所有验证错误。
每个视图中都有一个$errors
变量,该变量包含空的MessageBag
实例或使用Redirect::to('/')->withErrors($validator);
刷新到会话的实例
当在特定输入下方显示错误消息时,很多人可能会在表单中执行类似的操作。
{{ Form::text('username', null) }} @if($errors->has('username')) <div class="error">{{ $errors->first('username') }}></div>; @endif
您实际上可以完全删除 if
语句,并使用 first
方法的第二个参数将消息包装在 div
中。
{{ Form::text('username', null) }} {{ $errors->first('username', '<div class="error">:message</div>') }}
好多了,好多了!
可用时间: v3.0.0
记录:部分
Fluent
类已经存在很长时间了,当使用模式生成器创建迁移时,它实际上在框架本身内使用。 Laravel 3 和 Laravel 4 之间,类本身几乎没有变化,唯一大的区别是多了一些接口。
要使用 Fluent
类,您所需要做的就是获取一个实例,然后就可以了。
$user = new Illuminate\Support\Fluent; $user->name('Jason')->country('Australia')->subscriber();
该实例现在定义了 3 个属性:name
,值为 Jason
、country
,值为 Australia
和 subscriber
,值为布尔值 true
。
在 Laravel 4.1 之前,您只能从实例中真正设置和获取属性。从 Laravel 4.1 开始,您可以使用 toArray
和 toJson
方法分别获取属性数组及其 JSON 表示形式。
从 Laravel 4.2 开始,该类还实现了 JsonSerialized
接口,这意味着您可以将实例直接传递到 json_encode
中。
我们已经研究了 Laravel 框架的几个有用的精华。但是,正如您所猜测的,框架内还有更多内容。
了解 Laravel 可能提供的其他功能的最佳方法是深入研究源代码。它并不像您想象的那么可怕,您将学到很多关于您正在构建的框架的知识。
如果您发现了其他宝石,请随时在评论中分享!
위 내용은 Laravel의 숨겨진 보물을 찾아보세요의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!