이번 포스트에서 만들었던 글 작성 폼에 이어, 이번 포스트에서는 filament를 활용해 Category와 Article 리소스를 생성하고, 글 작성 폼에 카테고리 목록을 불러와 연동하는 방법을 알아보겠다.
이전 포스트
Laravel 라우트 그룹 설정 (articles.new 컴포넌트 생성 및 글 작성 폼 만들기)
Category 리소스의 UI 수정 및 글 작성 폼에 카테고리 표시 · 4th-avenue/laravel13-livewire@6991a13 · GitHub
전체적인 코드 수정은 이 깃허브 링크를 통해서 확인할 수 있다.
참고로.. (클릭)
app/Filament/Resources/Roles/Schemas/RoleForm.php와 app/Providers/Filament/AdminPanelProvider.php 파일의 수정된 내용은 이번 포스트와 관련이 없다.
라라벨 filament 관리자 패널 UI 개선: 폼 필드 그룹화 및 리소스 저장 후 전역 리다이렉트 설정
여기서 실수한 것을 수정한 것이다.
filament Section이 화면 전체 너비를 사용하도록 설정 · 4th-avenue/laravel13-livewire@7ffac43 · GitHub
그리고, 넣었어야 할 코드를 뒤늦게 추가했다.
CategoryForm.php에 ->columnSpanFull()이라는 코드를 추가하자.
filament Category 리소스와 Article 리소스 생성
make bash #컨테이너 안으로 들어간다.
php artisan make:filament-resource Category --generate
php artisan make:filament-resource Article --generate --view --soft-deletes
ubuntu 혹은 VSCode의 터미널에서 이 명령어들을 실행한다.
--soft-deletes 옵션은 filament의 Article 리소스에 Soft Delete 기능을 추가하는 역할을 한다.
각 데이터를 대표하는 대표 컬럼(필드명)이 무엇인지 묻는 질문에는, Category는 name을 Article은 title을 입력한다.
이전에 올렸던 포스트에서 전부 설명했었으니 나머지 자세한 설명은 생략하겠다.
filament 5, Role 리소스 생성하고 CRUD 기능 구현
이 링크가 이전에 올렸던 관련 포스트다.
Category 모델에 Fillable 정의
app/Models/Category.php에 추가할 코드
#[Fillable(['name', 'slug', 'parent_id'])]
categories 테이블에 데이터를 저장할 수 있도록 class 위쪽에 이 코드를 넣도록 하자.
Post 모델에 Fillable 정의 후 새 글 저장 기능 구현
이 코드에 대해서도 이 포스트에서 이전에 정리했었으니 넘어가도록 하겠다.
Schemas/CategoryForm.php 파일 수정
public static function configure(Schema $schema): Schema
{
return $schema
->components([
Section::make('Category')
->schema([
TextInput::make('name')
->required()
->maxLength(15),
TextInput::make('slug')
->required()
->maxLength(20),
TextInput::make('parent_id')
->numeric()
->default(null),
])->columns(3)
->columnSpanFull()
]);
}
configure 메서드를 이렇게 수정했다.
마이그레이션 파일에서 설정했던 것처럼, name 컬럼은 최대 15글자, slug 컬럼은 최대 20글자까지만 입력할 수 있도록 제한했다.
라라벨 filament 관리자 패널 UI 개선: 폼 필드 그룹화 및 리소스 저장 후 전역 리다이렉트 설정
그리고 폼 필드를 Section 컴포넌트로 그룹화하여 깔끔하게 정리했는데, 자세한 내용은 이 포스트를 참고하자.
->columns(3)으로 Section 내부의 입력 필드들을 한 줄에 3개씩 가로로 배치하는 그리드(Grid) 레이아웃으로 설정했다.
참고로 이 캡처 이미지는 아직 ->columnSpanFull()을 추가하지 않은 상태에서 캡처한 거다.
->columnSpanFull()을 넣지 않으면 이렇게 섹션이 화면의 1/2만 차지하게 된다.
Tables/CategoriesTable.php 파일 수정
TextColumn::make('id'),
이 한 줄을 추가했다.
테이블에 ID가 표시되도록 한 것이다.
이제 이렇게 테이블에 ID가 표시된다.
그리고 Category를 생성할 수 있게 됐으니 시험 삼아서 몇 개 만들어봤다.
글 작성 폼에서 카테고리 표시하기
resources/views/pages/articles/⚡new.blade.php
@foreach (\App\Models\Category::all() as $category)
<option value="{{ $category->id }}">
{{ $category->name }}
</option>
@endforeach
이 코드를 추가할 위치는 깃허브 링크를 참고하자.
이 코드는 Laravel Blade 템플릿에서 카테고리 목록을 select 태그를 이용해서 출력하는 코드다.
@foreach: Laravel Blade의 반복문으로,App\Models\Category모델의 모든 데이터를 가져와$category변수에 할당하며 반복한다.<option value="{{ $category->id }}">: 셀렉트 메뉴의 항목을 나타낸다.value속성에는 각 카테고리의 고유한 ID를 할당한다.{{ $category->name }}: 해당 카테고리의 이름을 출력한다.
이것으로 filament 관리자 패널에서 등록한 카테고리를 글 작성 폼에서 선택할 수 있게 되었다.
하지만 아직 완성된 건 아니다.
원래는 자식 카테고리만 표시되고 부모 카테고리는 선택할 수 없게 해야 하는데, 지금은 부모 자식 카테고리가 전부 표시되고 있다.
이 문제는 다음 포스트에서 해결하도록 하겠다.
다음 포스트


0 Comments
댓글 쓰기
🔸 댓글은 블로그 운영자의 승인 후에 블로그에 표시됩니다.
🔸 비로그인 방문자 분께서는 '익명'보다 이름/URL로 댓글을 남겨주시면 감사하겠습니다. (URL은 생략 가능합니다.)
🔸 구글 로그인 방문자는 '알림 사용'에 체크를 하시면, 남겨주신 댓글에 대한 답글 알림을 메일로 받아볼 수 있습니다. 📩