blog-details

1. Cách viết filter dễ quản lý trong Laravel

Câu hỏi đặt ra là: "Có còn cách nào khác để quản lý filter khôngcó cách nào tách riêng biệt filter ra ngoài file không?". Câu trả lời là có, và trong bài này mình sẽ hướng dẫn cách làm.

Trong bài này mình sẽ lấy ví dụ về tạo filter về user.

Trước hết bạn tạo thư mục 

app/Projects/Filters/Users
app/Projects/Filters/Users
app/Projects/Filters/Users và class 
FilterServiceProvider
FilterServiceProvider
FilterServiceProvider ở thư mục 
app/Projects/Filters/
app/Projects/Filters/
app/Projects/Filters/ với nội dung như sau:

<?php
namespace ProjectsProvidersFilters;
use IlluminateSupportServiceProvider;
class FilterServiceProvider extends ServiceProvider {
public function register(){
$this->registerFilters();
}
public function registerUserFilters(){
}
}
<?php namespace ProjectsProvidersFilters; use IlluminateSupportServiceProvider; class FilterServiceProvider extends ServiceProvider { public function register(){ $this->registerFilters(); } public function registerUserFilters(){ } }
<?php namespace ProjectsProvidersFilters; use IlluminateSupportServiceProvider; class FilterServiceProvider extends ServiceProvider { public function register(){ $this->registerFilters(); } public function registerUserFilters(){ } }

trong đó action 

register
register
register là bắt buộc phải có, 
registerUserFilters
registerUserFilters
registerUserFilters là action mẫu mình tạo ra để gọi tới các class filter mà sắp tạo. bạn có thể tạo các action khác nhau để gọi nó trong action 
register
register
register, chẳng hạn tạo action 
registerProductFilters
registerProductFilters
registerProductFilters và gọi nó trong action 
register
register
register.

Bạn mở file composer.json và thêm vào 

psr-4
psr-4
psr-4 của autoload: 
"Projects\Filters\" : "app/Projects/Filters",
"Projects\Filters\" : "app/Projects/Filters",
"Projects\Filters\" : "app/Projects/Filters",

tuy chinh filter trong laravel jpg

Sau đó bạn thêm vào cuối phần 

providers
providers
providers trong file 
app/config/app.php
app/config/app.php
app/config/app.php nội dung sau: 
'ProjectsFiltersFilterServiceProvider',
'ProjectsFiltersFilterServiceProvider',
'ProjectsFiltersFilterServiceProvider',
Như vậy là đã xong việc autoload rồi, bây giờ mình lấy việc bạn thêm filter kiểm tra quyền upload file cho user nhé.

Bạn tạo class 

CanUploadFilter
CanUploadFilter
CanUploadFilter trong thư mục 
app/Projects/Filters/Users
app/Projects/Filters/Users
app/Projects/Filters/Users và đương nhiên tên file trùng tên class (wink) với nội dung sau:

<?php
namespace ProjectsFiltersUsers;
class CanUpload {
public function filter(){
//code xử lý
}
}
<?php namespace ProjectsFiltersUsers; class CanUpload { public function filter(){ //code xử lý } }
<?php namespace ProjectsFiltersUsers; class CanUpload { public function filter(){ //code xử lý } }

Trong đó action 

filter
filter
filter là bắt buộc.

Bây giờ quay lại action 

registerUserFilters
registerUserFilters
registerUserFilters của  class 
FilterServiceProvider
FilterServiceProvider
FilterServiceProvider thêm vào đoạn code sau:

$this->app->router->filter('user.can.upload','ProjectsFiltersUsersCanUpload');
$this->app->router->filter('user.can.upload','ProjectsFiltersUsersCanUpload');
$this->app->router->filter('user.can.upload','ProjectsFiltersUsersCanUpload');

Trong đó 

user.can.upload
user.can.upload
user.can.upload là filter name mà bạn sẽ sử dụng nó về sau, 
ProjectsFiltersUsersCanUpload
ProjectsFiltersUsersCanUpload
ProjectsFiltersUsersCanUpload là gọi tới class 
CanUpload
CanUpload
CanUpload mà chúng ta đã tạo.

Và tương tự với các nhóm filter khác, bạn hãy tạo chúng thành nhóm riêng biệt với nhau, mình nghĩ sẽ mạch lạc và dễ quản lý hơn nhiều

Đánh giá bài viết