【laravel-admin】delete 액션 커스터마이즈
8430 단어 laravel-admin라라벨
관계를 붙이고 있는 테이블에서 관계원이 사라져 버리면 좋지 않은 경우라든가.
그 때문에 커스터마이즈할 필요가 있다. 실제로는 커스터마이즈가 아니고, 오리지날의 삭제 처리를 실장해 그쪽을 사용한다.
맞춤 액션 만들기
php artisan admin:action Post\\Delete --grid-row --name="delete"
다음 디렉토리에 만들어진다.app/Admin/Actions/Post/Delete.php
<?php
namespace App\Admin\Actions\Post;
use Carbon\Carbon;
use Encore\Admin\Actions\RowAction;
class Delete extends RowAction
{
public $name = 'delete';
public function handle()
{
// 削除処理
$this->row->delete();
return $this->response()->success('Delete Successful')->refresh();
}
public function dialog()
{
$auths = $this->row->auths;
$auths = $auths->filter(function($el){
$now = Carbon::now();
return $now < $el->auth_expired;
});
if(empty($auths->toArray()))
{
$message = '削除しますか?';
}
else
{
$message = '認証済みのようです。本当に削除しますか?';
}
$this->confirm($message);
}
}
posts 테이블에 auths 테이블이 붙어 있고, 인증이 끝났을 경우에 메세지를 전환하는 예.
내용의 처리는 적절히 변경해 주세요.
완전히 삭제 자체를 금지하는 것도 가능.
public function dialog()
{
...
}
dialog()
를 사용하면 확인 대화 상자가 나타납니다.
이런 ↓
public function form()
{
$type = [
1 => 'Advertising',
2 => 'Illegal',
3 => 'Fishing',
];
$this->checkbox('type', 'type')->options($type);
$this->textarea('reason', 'reason')->rules('required');
}
form()
를 사용하여 어떤 입력이나 선택을 할 수도 있습니다.
AWS와 같이 「삭제」라고 문자열을 보내지 않으면 삭제시키지 않는다든가.
만든 맞춤 동작을 사용하도록 설정
마지막으로 만든 사용자 지정 작업을 사용하도록 설정합니다.
함께 기본 삭제 작업을 disabled로 변경합니다.
<?php
namespace App\Admin\Controllers;
use App\Admin\Actions\Post\Delete;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Form;
use Encore\Admin\Grid;
class PostController extends AdminController
{
...
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
...
$grid->actions(function ($actions) {
$actions->disableDelete(); // オリジナルの削除は非表示
$actions->add(new Delete);
});
...
return $grid;
}
요약
상당히 자유도 높고 커스텀 액션 만들 수 있으므로 편리하네요.
통상은 디폴트로 준비되어 있는 delete 액션을 사용하면 좋다고 생각합니다만, 특수한 케이스에서는 커스텀 액션을 만들어 가면 문제 없을 것 같다.
Reference
이 문제에 관하여(【laravel-admin】delete 액션 커스터마이즈), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Dev-kenta/items/f295fc349858be568add
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
php artisan admin:action Post\\Delete --grid-row --name="delete"
<?php
namespace App\Admin\Actions\Post;
use Carbon\Carbon;
use Encore\Admin\Actions\RowAction;
class Delete extends RowAction
{
public $name = 'delete';
public function handle()
{
// 削除処理
$this->row->delete();
return $this->response()->success('Delete Successful')->refresh();
}
public function dialog()
{
$auths = $this->row->auths;
$auths = $auths->filter(function($el){
$now = Carbon::now();
return $now < $el->auth_expired;
});
if(empty($auths->toArray()))
{
$message = '削除しますか?';
}
else
{
$message = '認証済みのようです。本当に削除しますか?';
}
$this->confirm($message);
}
}
public function dialog()
{
...
}
public function form()
{
$type = [
1 => 'Advertising',
2 => 'Illegal',
3 => 'Fishing',
];
$this->checkbox('type', 'type')->options($type);
$this->textarea('reason', 'reason')->rules('required');
}
마지막으로 만든 사용자 지정 작업을 사용하도록 설정합니다.
함께 기본 삭제 작업을 disabled로 변경합니다.
<?php
namespace App\Admin\Controllers;
use App\Admin\Actions\Post\Delete;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Form;
use Encore\Admin\Grid;
class PostController extends AdminController
{
...
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
...
$grid->actions(function ($actions) {
$actions->disableDelete(); // オリジナルの削除は非表示
$actions->add(new Delete);
});
...
return $grid;
}
요약
상당히 자유도 높고 커스텀 액션 만들 수 있으므로 편리하네요.
통상은 디폴트로 준비되어 있는 delete 액션을 사용하면 좋다고 생각합니다만, 특수한 케이스에서는 커스텀 액션을 만들어 가면 문제 없을 것 같다.
Reference
이 문제에 관하여(【laravel-admin】delete 액션 커스터마이즈), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Dev-kenta/items/f295fc349858be568add
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(【laravel-admin】delete 액션 커스터마이즈), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Dev-kenta/items/f295fc349858be568add텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)