Laravel Nova는 수많은 사용자 정의 옵션을 제공한다.

이러한 옵션 중 하나를 "조치"라고한다.

사용자 지정 작업을 수행하기 위해 리소스에 작업을 첨부하는 방법을 살펴 보겠다.


1. 조치 액션만들기(게시한 글)

1
php artisan nova:action PublishPost
cs



2. Nova/Actions/PublishPost.php

is_published 테이블 값을 0 (true)로 업데이트하는 소스이다.

1
2
3
4
5
6
7
8
    public function handle(ActionFields $fields, Collection $models)
    {
        foreach ($models as $model) {
            $model->update([
                'is_published' => true
            ]);
        }
    }
cs


Nova/Post.php 객체를 추가해준다.

1
2
3
4
5
6
    public function actions(Request $request)
    {
        return [
            new PublishPost       
        ];
    }
cs


3. 셀렉트 박스를 누르면 Select Action드롭박스가 활성화 된다.




되야하는데 변화가 없다 suss라고는 메시지가 나오는데 데이터베이스에 변화가 없음

https://nova.laravel.com/docs/2.0/actions/defining-actions.html#overview


안되는데 계속 진행하겠다 

2번항을 이렇게 다시 수정한다. Nova/Actions/PublishPost.php 정상적으로 DB에 입력이 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    public function handle(ActionFields $Fields, Collection $models)
    {
        // foreach ($models as $model) {
        //         $model->update(['is_published' => true]);
        // }
        foreach ($models as $model) {
            $model->forceFill(['is_published' => true])->save();
 
            $this->markAsFinished($model);
        }
 
        sleep(5);
 
        return Action::message('IS PUBLISHED가 변경 되었습니다.');
        //return Action::redirect('http://novapcb.test/nova/resources/posts');
    }
cs


4. 사용자 정의 메시지를 만들수 있다.

1
2
3
4
5
6
7
8
    public function handle(ActionFields $Fields, Collection $models)
    {
        foreach ($models as $model) {
                $model->update(['is_published' => true]);
        }
 
        return Action::message('The Post was published successfully');
    }
cs


메시지가 바뀐것을 확인 할 수 있다.

Action::danger 로 변경하면 메시지가 빨간색으로 변경된다.

Action::download(storage_path('your/file.csv'));

Action::redirect('http://novapcb.test/nova/resources/posts');


5. 업데이트 항목을 구현하는 것이다. 

Nova/Actions/PublishPost.php 

sleep(5) 목록수를 정해준다.

1
2
3
4
5
6
7
8
9
    public function handle(ActionFields $Fields, Collection $models)
    {
        foreach ($models as $model) {
                $model->update(['is_published' => true]);
        }
 
        sleep(5);
        //return Action::redirect('http://novapcb.test/nova/resources/posts');
    }
cs


Post.php 파일에서 아래와 같이 클래스안에서 임포트해준다.

1
2
3
4
class Post extends Model
{
 
    use Actionable;
cs


Posts 게시물의 디테일을 누르면 아래쪽에 변경 이력이 있을 것이다.


'라라벨 > NOVA' 카테고리의 다른 글

nova 맞춤도구 만들기  (0) 2020.01.04
nova 측정항목정의(value, trend, partition)  (0) 2020.01.04
nova 커스텀 테마  (0) 2020.01.02
nova main page 커스텀  (0) 2020.01.02
nova 유저 커스텀링크버튼 만들기  (0) 2020.01.02

1. 테마생성 명령어를 입력한다.

1
php artisan nova:theme beyondcode/nova-theme
cs


Would you like to update your Composer packages? yes

Composer 패키지를 업데이트 하시겠습니까?


2. 브라우저에서 새로고침하면 테마가 변경되었을 것이다.


3. 아래의 경로의 파일을 변경하면 된다.

nova-components/NovaTheme/src/ThemeServiceProvider.php

nova-components/NovaTheme/resorces/css/theme.css



nova/resources/views/layout.blade.php 파일에 main파일이있다.

커스텀 하기 위해서는 파일을 복사해서 다른곳에 넣어둬야한다. gitignore에 포함되어 있어서 소스가 안올라간다.


resources/views/vendor/nova/layout.blade.php 파일로 복사하자.


Content 부분을 삭제해보자



'라라벨 > NOVA' 카테고리의 다른 글

nova 동작정의(defining actions)  (0) 2020.01.04
nova 커스텀 테마  (0) 2020.01.02
nova 유저 커스텀링크버튼 만들기  (0) 2020.01.02
nova 제목 타이틀 변경하기  (0) 2020.01.02
필터 및 렌즈 (nova Filters and Lenses)  (0) 2020.01.02

사진과 같이 유저 드롭다운에서 커스텀 링크를 만드는 방법이다.




a 태그를 복사해서 사용하자~~

1
2
3
4
5
6
7
8
9
10
11
12
13
<dropdown-menu slot="menu" width="200" direction="rtl">
    <ul class="list-reset">
        <li>
            <a href="#" class="block no-underline text-90 hover:bg-30 p-3">
                Custom Link
            </a>
 
            <a href="{{ route('nova.logout') }}" class="block no-underline text-90 hover:bg-30 p-3">
                {{ __('Logout') }}
            </a>
        </li>
    </ul>
</dropdown-menu>
cs


'라라벨 > NOVA' 카테고리의 다른 글

nova 커스텀 테마  (0) 2020.01.02
nova main page 커스텀  (0) 2020.01.02
nova 제목 타이틀 변경하기  (0) 2020.01.02
필터 및 렌즈 (nova Filters and Lenses)  (0) 2020.01.02
수색(Searching)  (0) 2020.01.02

정말 찾기 힘들었다.



resources/views/vendor/nova/partials/logo.blade.php 파일에서 위와 같이 작성하면 변경될 것이다.~

Laravel Nova의 사용자 정의 필터 및 "렌즈"를 사용하여 리소스 목록을 사용자 정의하는 방법을 배운다.


1. 출판되었는지 안되었는지 구분하는 필터를 생성한다.

1
php artisan nova:filter PostPublished
cs

아래와 같이 Nova/Filters/PostPublished.php 파일이 생성되었다.


2. Nova/Filters/PostPublished.php 파일을 아래와 같이 수정한다.

1
2
3
4
5
6
7
    public function options(Request $request)
    {
        return [
            'Is Published' => '1',
            'Not Published' => '0'
        ];
    }
cs


1
2
3
4
    public function apply(Request $request, $query, $value)
    {
        return $query->where('is_published', $value);
    }
cs


3. Nova/Post.php 파일에서 filters메서드에서 소스를 작성한다. 객체를 생성해준다.

1
2
3
4
5
6
7
8
    public function filters(Request $request)
    {
        return [
 
            new PostPublished
 
        ];
    }
cs


IS PUBLISHED(출판)이 찍히면 1 아니면 0





4. 이번에는 카테고리 필터를 생성해준다. 

1
php artisan nova:filter PostCategories
cs


Nova/Filters/PostCategories.php

1
2
3
4
5
6
7
    public function options(Request $request)
    {
        return [
            'Tutorials' => 'tutorials',
            'News' => 'news'
        ];
    }
cs


1
2
3
4
    public function apply(Request $request, $query, $value)
    {
        return $query->where('category', $value);
    }
cs


Nova/Post.php 파일에서 filters메서드에서 소스를 작성한다.  new PostCategories 객체를 생성해준다.

1
2
3
4
5
6
7
8
9
10
    public function filters(Request $request)
    {
        return [
 
            new PostPublished,
 
            new PostCategories
 
        ];
    }
cs


POST CATEGORIES 필터가 추가된것을 볼 수 있다.


와우~ 두가지이상 항목을 필터를 할 수 있다니~~



5. 렌즈파일 생성

1
php artisan nova:lens MostTags
cs


Lenses/MostTags.php 파일이 생성되었다.


MostTags.php 파일에서 다음과 같이 소스를 수정한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    public static function query(LensRequest $request, $query)
    {
        return $request->withOrdering($request->withFilters(
            $query->withCount('tags')
            ->orderBy('tags_count', 'desc')
        ));
    }
 
    /**
     * Get the fields available to the lens.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function fields(Request $request)
    {
        return [
            ID::make('ID', 'id')->sortable(),
 
            Text::make('Title'),
 
            Number::make('# Tags', 'tags_count')
        ];
    }
cs


Nova/post.php 파일에 객체를 넣어준다.

1
2
3
4
5
6
    public function lenses(Request $request)
    {
        return [
            new MostTags
        ];
    }
cs


Lens 라는 드롭다운 버튼이 생성되었다.



해당 타이틀의 태그와 수를 확인 할 수있다. 


nova 내장 검색 기능을 사용하여 리소스 검색을 활성화 또는 비활성화하는 방법

Laravel Scout를 사용하여 퍼지 검색을 활성화하는 방법 및 검색 결과의 출력을 수정하는 방법


Nova/Post.php 지역검색컬럼을 지정해준다.

1
2
3
4
5
    #지역 검색 컬럼 지정해주기
    public static $search = [
        'id', 'title', 'body'
    ];
 
cs



1. 글로벌 검색에서 카테고리까지 나오게 하고 싶으며 아래의 소스를 Nova/Post.php 에 삽입한다.




1
2
3
4
    public function title()
    {
        return $this->title . ' - ' . $this->category;
    }
cs


글 작성자를 보여주고 싶으면


1
2
3
4
    public function subtitle()
    {
        return 'Author: ' . $this->user->name;
    }
cs


카테고리 작성자 모두 보여지게 하려면


1
2
3
4
   public function subtitle()
    {
        return $this->category . ' - ' .'Author: ' . $this->user->name;
    }
cs


글로벌 검색에 해당 게시판은 빼겠다 하면은 아래의 소스를 삽입하면 글로벌 검색에서 제외하게 된다.

1
 public static $globallySearchable = false;
cs



다음으로 Scout 사용이 있었는데 생략하겠다.

https://laravel.com/docs/5.8/scout

Laravel Scout는 Eloquent 모델에 전체 텍스트 검색을 추가 할 수있는 간단한 드라이버 기반 솔루션을 제공합니다 Scout는 모델 옵저버를 사용하여 검색 색인을 Eloquent 레코드와 자동으로 동기화합니다.

현재 스카우트는 Algolia 드라이버 와 함께 제공됩니다 그러나 커스텀 드라이버를 작성하는 것은 간단하며 자신의 검색 구현으로 스카우트를 자유롭게 확장 할 수 있습니다.

관리자 패널에서 결국 다른 형식의 인증을 지정해야함( 유저별 또는 레벨별)

리소스의 어느 부분을 액세스 할 수 있는지 방법을 알아본다.

https://nova.laravel.com/docs/2.0/resources/authorization.html#authorization


1. 권한부여를 생성한다.

1
php artisan make:policy PostPolicy -m Post
cs


Policies 에 PostPolicy.php 파일이 생성되었다.


2. 상단에 모델을 임포트하고 있다.

1
2
use App\Post;
use App\User;
cs


3. app/Providers/AuthServiceProvider.php 파일에 네모박스를 재정의 해주자 'App\Post' => 'App\Policies\PostPolicy'


4. Policies/PostPolicy.php 파일에서 정의하자


사이드바에서 보이게 하기

1
2
3
4
    public function viewAny(User $user)
    {
        return true;
    }
cs


[참고사항]

id 4번 안보이게 하기

1
return $post->id !==4;
cs

admin유저만 적용

1
return $user->is_admin;
cs



디테일뷰 보이게하기

1
2
3
4
    public function view(User $user, Post $post)
    {
        return true;
    }
cs



글 작성하게 하기

1
2
3
4
    public function create(User $user)
    {
        return true;
    }
cs



해당메서드에 입력해주면 활성화가 된다.

1
return true;
cs


5. 만약 해당글 작성 유저만 보이게 하려면 이렇게 하면 된다. Nova/Post.php

1
2
3
4
    public static function indexQuery(NovaRequest $request, $query)
    {
        return $query->where('user_id', $request->user()->id);
    }
cs

부분을 소스에 넣으면 된다.


내가 작성한 글만 보이게 된다.


'라라벨 > NOVA' 카테고리의 다른 글

필터 및 렌즈 (nova Filters and Lenses)  (0) 2020.01.02
수색(Searching)  (0) 2020.01.02
자원(resource)의 검증(vaildation)  (0) 2020.01.01
자원의(resource) 관계(Relationships)  (0) 2020.01.01
자원(resource)의 분야 field  (0) 2019.12.31

+ Recent posts