본문으로 바로가기

laravel - 컴포넌트

category 코딩/Laravel 2024. 6. 25. 16:19

 

컴포넌트 생성

컴포넌트를 생성하면 레거시에서 include 하듯이 파일을 다룰 수 있다.

header, footer 또는 Alert, Alarm (Modal) 등 어플리케이션 전반에서 사용되는 파일은 컴포넌트로 생성하는 것을 고려해 보아야 한다.

artisan 으로 Alert 이라는 이름의 컴포넌트를 생성한다.

컴포넌트를 한 번도 생성하지 않았다면 각각의 경로에 폴더까지 생성된다.

$ php artisan make:component Alert
Component created successfully.
$ ll app/View/Components/
total 12
drwxrwxr-x 2 lifelike2 lifelike2 4096 Jun 25 09:49 ./
drwxrwxr-x 3 lifelike2 lifelike2 4096 Jun 25 09:49 ../
-rw-rw-r-- 1 lifelike2 lifelike2 1221 Jun 25 10:51 Alert.php
$ ll resources/views/components/
total 12
drwxrwxr-x 2 lifelike2 lifelike2 4096 Jun 25 09:49 ./
drwxr-xr-x 6 lifelike2 lifelike2 4096 Jun 25 09:49 ../
-rw-rw-r-- 1 lifelike2 lifelike2  963 Jun 25 10:54 alert.blade.php

 

컴포넌트 파일

Alert.php 파일 render() 메소드에 view 파일로 전달되는 변수를 설정할 수 있다.

/app/View/Components/Alert.php
<?php

namespace App\View\Components;

use Illuminate\View\Component;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth;

class Alert extends Component
{
	//
    //...(생략)...
    //
    public function render()
    {
        $noticeAlert = DB::table('users')
                        ->where('user_id', Auth::user()->user_id)
                        ->first();

        return view('components.alert')->with([
            'noticeAlert' => $noticeAlert
        ]);
    }
}

 

view 파일

view 파일에 별칭 태그를 사용하여 렌더링한다.

/resources/views/layout.blade.php
<!-- 생략 -->
    </head>
    <body>
        @include('partials/header')
        <x-alert/> <!-- x-컴포넌트명(소문자) -->

 

컴포넌트 blade 템플릿

blade 파일은 아래 형식으로 구현하였다.

/resources/views/components/alert.blade.php
@if ($noticeAlert->notice_read == 'n')
<div>
	<span>읽지 않은 공지사항이 있습니다.</span>
</div>
@endif