Laravel에서 매우 간단한 검색 기능 패키지 만들기
검색 기능?
웹 앱을 만들면 검색 기능을 자주 만들죠?
↓ 이런 검색 화면이다.
이렇게 간단하면
ifやEloquentを使って条件を追加する
도 괜찮지만 검색 항목이 많아지고 복잡해지면 가독성이 떨어지고 귀찮아진다.이를 위해 라벨의 검색 기능 제작 방법, 검색에 특화된 패키지 등을 만들었지만 검색을 간단하게 설치할 수 있는 것이 없어 만들어 봤다.
포장
만들 때 신경 쓰이는 포인트.
Seaaarch에서 할 수 있는 일.
기본용법
설치
composer require fusic/Seaaaaarch
블레이드 준비
index.blade.php 등에서 검색용 화면을 만들다.
이곳은 평범한 블레이드가 될 것이다.
※ 이름과 주소로 검색
index.blade.php
<form action="{{ route('users.search') }}" method="post">
@csrf
<div class='row'>
<div class='col-md-6'>
<div class='form-group'>
<input name="name" />
</div>
</div>
<div class='col-md-6'>
<div class='form-group'>
<input name="address" />
</div>
</div>
</div>
<div style="text-align: center;">
<button class='btn-default'>検索</button>
</div>
</form>
설정 가능 만들기
Seaaaarch를 설치하면 생성할 수 있습니다
Searchable
.Searchable은 검색 실제 상황을 설명하는 클래스입니다.
php artisan make:searchable UsersSearch
간단한 검색이라면 다음과 같이 할 수 있다設定だけで検索を実装
.UsersSearch.php
<?php
namespace App\Search;
use Search\Searchable;
class UserSearch extends Searchable
{
public function __construct()
{
$this->params = [
// ここに検索条件を記載します
// 名前 と 住所を検索できるようにします
'name' => [
// typeにvalueを設定すると、入力値を完全一致で検索します。
'type' => 'value'
],
'address' => [
// typeにvalueを設定すると、入力値を部分一致で検索します。
'type' => 'like'
],
];
}
}
※ 검색을 위해value,like,in,callback 등이 준비되어 있습니다.※ Searchable에 대한 자세한 설정 항목은 참조구성 가능.
컨트롤러에서 검색 작업 생성하기
위에서 만든form을 만들어서 검색을 위한 자동 검사를 받습니다.
설정 가능한 클래스 실례를 QueryParser::parse에 전달하여 오프라인 자체 검사 값에서 검색에 필요한 값을 검색합니다.
※ 루트를 설정하세요.
UsersController.php
public function search() {
$query = QueryParser::parse(new UsersSearch());
return redirect()->route('users.index', $query);
}
검색 실행
Seaaaach를 설치한 후 Eloquent에
searchメソッド
를 추가합니다.Searchable 인스턴스를
search
에 전달하여 Searchable로 설정된 검색 조건에 따라 검색합니다.search
도 방법 전후에 Eloquent 기능을 통해 조건과 정렬 등을 추가할 수 있다.UsersController.php
public function index() {
UserModel::search(new UserSearch())->where('example', 'test');
// or
UserModel::where('example', 'test')->search(new UserSearch())
}
유연한 검색
검색 조건은 Searchable에 쓰지만 완전히 일치하거나 부분적으로 일치하는 것이 아니라
JoinやPHPの処理を挟む
등 복잡한 처리도 있다고 생각합니다.이 경우 사용
Searchableのcallback
.콜백 매개변수
$builder
에서는 Eloquent 기능을 사용할 수 있습니다.UsersSearch.php
<?php
namespace App\Search;
use Search\Searchable;
class UserSearch extends Searchable
{
public function __construct()
{
$this->params = [
'name' => [
// typeにcallbackを指定すると、methodに検索処理を書くことが出来ます。
'type' => 'callback',
'method' => function (Builder $builder, $key, $value) {
// ここで条件を組み立てます
$name = mb_convert_kana($value, 'Hc');
$builder->where('name', $name);
}
]
];
}
}
처리 유니버설
프로젝트 전체 등 공통적으로 활용하고 싶은 검색 조건을 만드는 기능도 준비되어 있다
Seaaaaarch
.필터 클래스를 만들어서 유니버설화할 수 있습니다.
필터 생성
필터를 생성하여 검색 조건을 생성할 수 있습니다.
php artisan make:filter ExampleFilter
App\Search\Filter\ExampleFilter.php<?php
namespace App\Search\Filter;
use Illuminate\Database\Eloquent\Builder;
use Search\Filter\Filter;
use Search\Filter\FilterInterface;
class ExampleFilter extends Filter implements FilterInterface {
protected $defaultOptions = [];
public function process(Builder $builder, $field, $value)
{
// ここに検索条件の処理を記載します
// 例:20歳以上を検索条件にする
$builder->where('age', '>=', 20);
}
}
필터 사용
UsersSearch.php
<?php
namespace App\Search;
use Search\Searchable;
class UserSearch extends Searchable
{
public function __construct()
{
$this->params = [
'age' => [
// この指定で、20歳以上の条件がかかるので検索条件の共通化をすることが可能です。
'type' => ExampleFilter::class
]
];
}
}
기타 상세한 이용 방법
GitHub에 기재되어 있으니 확인하십시오.
https://github.com/fusic/Seaaaaarch/tree/master/docs/ja
마음에 드시면 Pull request와 star를 잘 부탁드립니다.
Reference
이 문제에 관하여(Laravel에서 매우 간단한 검색 기능 패키지 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kozo/items/48fa6b907baa6507e464텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)