Một số tip về Laravel Snippet và Method
Bài đăng này đã không được cập nhật trong 3 năm
Hôm nay mình sẽ giới thiệu một số Snippet và Method trong laravel mà có lẽ mọi người không hay để ý đến. Cùng tìm hiểu nhé!
1. Kiểm tra bản ghi tạo từ firstOrCreate có phải là bản ghi mới không
$post = Post::firstOrCreate(...);
if ($post->wasRecentlyCreated()) {
// bài post mới
} else {
// bài post đã tồn tại
}
2. Tìm các ID liên quan đến relationship BelongsToMany
$user->roles()->allRelatedIds()->toArray();
3. abort_unless()
// Thay vì dùng
public function edit($item) {
if (// User không được edit) {
return false;
}
// else: được edit
}
// Ta có thể làm như sau
public function edit($item) {
abort_unless(Gate::allows('do-something', $item), 403);
// Actual logic
}
// Ví dụ khác: Đảm bảo user đã đăng nhập
abort_unless(Auth::check(), 403);
4. Model Keys
// cách bình thường chúng ta hay dùng
User::all()->pluck('id')->toArray();
// Cách viết gọn
User::all()->modelKeys();
5. throw_if
throw_if(
!Hash::check($data['current_password'], $user->password),
new Exception(__("That isn't your old password.")
);
6. Dump tất cả các cột của bảng
Schema::getColumnListing('table')
7. Redirect đến các domain ngoài
return redirect()->away('https://www.youtube.com');
8. Request exists() với has()
// http://example.com?popular
$request->exists('popular') // true
$request->has('popular') // false
http://example.com?popular=foo
$request->exists('popular') // true
$request->has('popular') // true
9. array_wrap
// cách thông thường
$posts = is_array($posts) ? $posts : [$posts];
// Cách ngắn gọn :)
$posts = array_wrap($posts);
10. optional()
optional() cho phép truy cập các thuộc tính hoặc gọi các method trên một đối tượng.
Nếu đối tượng đã cho là null, các thuộc tính và phương thức sẽ trả về null thay vì gây lỗi.
// User 1 tồn tại và có tài khoản
$user1 = User::find(1);
$accountId = $user1->account->id; // 1
// User 2 tồn tại và không có tài khoản
$user2 = User::find(2);
$accountId = $user2->account->id; // PHP Error: Trying to get property of non-object
// Fix không dùng optional()
$accountId = $user2->account ? $user2->account->id : null; // null
$accountId = $user2->account->id ?? null; // null
// Fix dùng optional()
$accountId = optional($user2->account)->id; // null
11. data_get()
data_get() cho phép lấy giá trị từ một mảng hoặc đối tượng có ký tự dấu chấm. Hàm này hoạt động tương tự giống hàm array_get().
Tham số thứ ba tùy chọn được sử dụng để cung cấp giá trị mặc định nếu không tìm thấy key.
// array
$array = ['posts' => ['comments' => ['count' => 44]]];
$count = data_get($array, 'posts.comments.count'); // 44
$avgCost = data_get($array, 'posts.comments.avg_cost', 0); // 0
// object
$object->posts->comments->count = 44;
$count = data_get($object, 'posts.comments.count'); // 44
$avgCost = data_get($object, 'posts.comments.avg_cost', 0); // 0
12. push()
Dùng để lưu một model và các relation tương ứng của nó.
$user = User::first();
$user->name = "Hero";
$user->posts->content = 'I am Viblo';
$user->push(); // Update bản ghi của cả user and posts vào DB
13. @forelse
@if ($users->count() > 0)
@foreach ($users as $user)
<li>{{ $user->name }}</li>
@endforeach
@else
<p>No users</p>
@endif
// thay bằng
@forelse ($users as $user)
<li>{{ $user->name }}</li>
@empty
<p>No users</p>
@endforelse
14. @each
@foreach ($users as $user)
@include('components.userdetail', ['user' => $user])
@endforeach
//thay bằng
@each ('page.user_detail', $users, 'user')
// hoặc
@each ('page.user_detail', $users, 'user', 'page.user_notfound')
15. @json
<script>
var users = {!! json_decode($users) !!};
// thay bằng
var users = @json($users);
</script>
16. @verbatim
<div class="content">
Hello, @{{ name }}.
Date, @{{ date }}
</div>
// thay bằng
@verbatim
<div class="content">
Hello, {{ name }}.
Date, {{ date }}
</div>
@endverbatim
17. @isset & @empty
@if (isset($records))
// $records dc định nghĩa và không null
@endif
@if (empty($records))
// $records là rỗng
@endif
// thay bằng
@isset ($records)
// $records dc định nghĩa và không null
@endisset
@empty ($records)
// $records là rỗng
@endempty
18. @php
@php
// chạy hàm php trong view
@endphp
19. @push & @stack
<body>
@stack('scripts')
</body>
// trong view con
@push('scripts')
<scripts src="/example.js"></scripts>
@endpush
20. @inject
// Inject bất kỳ dịch vụ nào từ Service Container
@inject('metrics', 'App\Services\MetricsService')
<div>
Monthly Revenue: {{ $metrics->monthlyRevenue() }}
</div>
21. @includeWhen
@if ($viewSection)
@include('page.section', ['some' => 'data'])
@endif
// thay bằng
@includeWhen($viewSection, 'page.section', ['some' => 'data'])
22. @hasSection
// Kiểm tra nếu 1 section có mặt trong view con
@hasSection('navigation')
<div class="pull-right">
@yield('navigation')
</div>
<div class="clearfix"></div>
@endif
Trên đây là một số Snippet và Method trong laravel, mong rằng sẽ giúp ích được cho mọi người!
Thanks for reading
All rights reserved