๐ฏ ๋ทฐ ๋ง๋ณด๊ธฐ - ์ฒซ ๋ฒ์งธ ๋ทฐ ๋ง๋ค์ด๋ณด๊ธฐ
Laravel ๋ทฐ๊ฐ ๋ญ์ง 5๋ถ๋ง์ ์ฒดํํ๊ณ ์ฒซ ๋ฒ์งธ HTML ํ์ด์ง ๋ง๋ค์ด๋ณด์ธ์
๐ฏ ๋ทฐ ๋ง๋ณด๊ธฐ
๋ชฉํ: 5๋ถ ์์ ๋ทฐ๊ฐ ๋ญ์ง ์ดํดํ๊ณ ์ฒซ ๋ฒ์งธ HTML ํ์ด์ง ๋ง๋ค๊ธฐ!
๐ค ๋ทฐ(View)๊ฐ ๋ญ๊น์?
์ค์ํ ๋น์
๐จ ํ๊ฐ๊ฐ ๊ทธ๋ฆผ ๊ทธ๋ฆฌ๊ธฐ
ํ๊ฐ(๋ผ์ฐํธ) + ์บ๋ฒ์ค(๋ทฐ) = ์์ฑ๋ ๊ทธ๋ฆผ(์นํ์ด์ง)
๐ป ์นํ์ด์ง ๋ง๋ค๊ธฐ
๋ผ์ฐํธ(์ปจํธ๋กค๋ฌ) + ๋ทฐ(HTML ํ
ํ๋ฆฟ) = ์์ฑ๋ ์นํ์ด์ง
Laravel ๊ณต์ ์ ์
Laravel ๊ณต์ ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด:
๋ทฐ๋ ์ปจํธ๋กค๋ฌ/์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง๊ณผ ํ๋ ์ ํ ์ด์ ๋ก์ง์ ๋ถ๋ฆฌํ๋ ํธ๋ฆฌํ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
์ฝ๊ฒ ๋งํ๋ฉด:
- ๐ HTML ํ ์คํธ ๊ด๋ฆฌ์: HTML ๋ฌธ์์ ํ ์คํธ๋ฅผ ๋ชจ์์ ์ฝ๊ฒ ๋ฐํํ ์ ์๋ ๊ธฐ๋ฅ
- ๐จ ๋์์ธ ๋ถ๋ฆฌ: ์ฝ๋์ ๋์์ธ์ ๋ฐ๋ก ๊ด๋ฆฌ
- ๐ ์ฌ์ฌ์ฉ ๊ฐ๋ฅ: ์ฌ๋ฌ ๋ผ์ฐํธ์์ ๊ฐ์ ๋ทฐ ์ฌ์ฉ
- โ๏ธ ํ ํ๋ฆฟ ์์ง: .blade.php๋ฅผ ์ฌ์ฉํด ๋จ์ HTML๋ณด๋ค ํจ์ฌ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ ์ ๊ณต
๐ ๋ทฐ ํ์ผ ์์น
๋ชจ๋ ๋ทฐ ํ์ผ์ resources/views ๋๋ ํ ๋ฆฌ์ ์ ์ฅ๋ฉ๋๋ค:
project/
โโโ resources/
โ โโโ views/
โ โโโ welcome.blade.php โ ๊ธฐ๋ณธ ํ์ ํ์ด์ง
โ โโโ greeting.blade.php โ ์ฐ๋ฆฌ๊ฐ ๋ง๋ค ํ์ด์ง
โ โโโ ...
๐ง view() ํฌํผ ํจ์
Laravel์์๋ view() ํจ์๋ก ๋ทฐ๋ฅผ ํธ์ถํฉ๋๋ค:
// resources/views/greeting.blade.php ํ์ผ์ ํธ์ถ
return view('greeting');
// ๋ฐ์ดํฐ์ ํจ๊ป ๋ทฐ ํธ์ถ
return view('greeting', ['name' => 'James']);
๐ ์ฒซ ๋ฒ์งธ ๋ทฐ ๋ง๋ค์ด๋ณด๊ธฐ (3๋ถ ์์ฑ!)
1๋จ๊ณ: ๋ทฐ ํ์ผ ์์ฑ
resources/views/hello.blade.php ํ์ผ์ ๋ง๋ค์ด๋ณด์ธ์:
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>์ฒซ ๋ฒ์งธ ๋ทฐ</title>
<style>
body {
font-family: Arial;
text-align: center;
padding: 50px;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
}
.container {
background: rgba(255,255,255,0.1);
padding: 30px;
border-radius: 15px;
}
</style>
</head>
<body>
<div class="container">
<h1>๐ ๋ด ์ฒซ ๋ฒ์งธ Laravel ๋ทฐ!</h1>
<p>์๋
ํ์ธ์! ๋๋์ด ๋ทฐ๋ฅผ ๋ง๋ค์์ด์!</p>
<p>ํ์ฌ ์๊ฐ: </p>
</div>
</body>
</html>
2๋จ๊ณ: ๋ผ์ฐํธ์์ ๋ทฐ ํธ์ถ
routes/web.php์ ์ถ๊ฐ:
Route::get('/hello-view', function () {
return view('hello');
});
3๋จ๊ณ: ๋ธ๋ผ์ฐ์ ์์ ํ์ธ
์ฃผ์์ฐฝ์ ์
๋ ฅ: http://localhost:8000/hello-view
๊ฒฐ๊ณผ: ์์ ๊ทธ๋ผ๋์ธํธ ๋ฐฐ๊ฒฝ์ ์ฒซ ๋ฒ์งธ ๋ทฐ ์์ฑ! ๐
๐จ ๋ทฐ์ ๋ฐ์ดํฐ ์ ๋ฌํ๊ธฐ (2๋ถ ์ถ๊ฐ!)
๋ทฐ ํ์ผ์ ๋ณ์ ๊ณต๊ฐ ๋ง๋ค๊ธฐ
resources/views/greeting.blade.php:
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>์ธ์ฌ ํ์ด์ง</title>
<style>
body { font-family: Arial; padding: 50px; text-align: center; }
.greeting { background: #f8f9fa; padding: 20px; border-radius: 10px; margin: 20px auto; max-width: 400px; }
</style>
</head>
<body>
<div class="greeting">
<h1>๐ ๋ ์๋
ํ์ธ์!</h1>
<p>๋์ด: ์ธ</p>
<p>์ทจ๋ฏธ: </p>
<p>์ค๋์ ์
๋๋ค!</p>
</div>
</body>
</html>
๋ผ์ฐํธ์์ ๋ฐ์ดํฐ ์ ๋ฌ
Route::get('/greeting/{name}', function ($name) {
return view('greeting', [
'name' => $name,
'age' => 25,
'hobby' => '์ฝ๋ฉ',
'today' => date('Y๋
m์ d์ผ')
]);
});
ํ
์คํธ: /greeting/๊น์ฒ ์ ์ ์ํด๋ณด์ธ์!
๐ฎ ์ค์ต ๋ฏธ์ (5๋ถ)
๋ฏธ์ 1: ๋๋ง์ ํ๋กํ ํ์ด์ง ๋ง๋ค๊ธฐ
resources/views/profile.blade.php์์ฑ- ๋ณธ์ธ์ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ฃผ๋ ์์ ํ์ด์ง ๋ง๋ค๊ธฐ
- ๋ผ์ฐํธ ์ฐ๊ฒฐํ๊ธฐ
ํ ํ๋ฆฟ:
<!DOCTYPE html>
<html>
<head>
<title>์ ํ๋กํ</title>
<style>
/* ์ฌ๋ฌ๋ถ๋ง์ CSS ์คํ์ผ! */
</style>
</head>
<body>
<div class="profile">
<h1></h1>
<p></p>
<!-- ๋ ๋ง์ ์ ๋ณด ์ถ๊ฐ! -->
</div>
</body>
</html>
๋ฏธ์ 2: ๋์ ๋ฐฉ๋ช ๋ก ๋ง๋ค๊ธฐ
Route::get('/guestbook/{message}', function ($message) {
return view('guestbook', [
'message' => $message,
'visitor_ip' => request()->ip(),
'visit_time' => now()->format('Y-m-d H:i:s')
]);
});
๋์ : /guestbook/์๋
ํ์ธ์ ๊ฐ์ URL๋ก ๋ฐฉ๋ฌธ ๋ฉ์์ง๋ฅผ ๋จ๊ธธ ์ ์๊ฒ ๋ง๋ค์ด๋ณด์ธ์!
๐ก ๋ทฐ vs ์ง์ HTML ๋น๊ต
โ ๋ผ์ฐํธ์์ ์ง์ HTML (๋์ ์)
Route::get('/bad', function () {
return '<html><head>...</head><body>...</body></html>'; // ๐ฐ
});
โ ๋ทฐ ํ์ผ ์ฌ์ฉ (์ข์ ์)
Route::get('/good', function () {
return view('my-page'); // ๐ ๊น๋!
});
๋ทฐ ์ฌ์ฉ์ ์ฅ์ :
- ๐ ์ฝ๊ธฐ ์ฌ์: HTML์ด ๋ณ๋ ํ์ผ๋ก ์ ๋ฆฌ
- ๐ ์ฌ์ฌ์ฉ ๊ฐ๋ฅ: ์ฌ๋ฌ ๋ผ์ฐํธ์์ ๊ฐ์ ๋ทฐ ์ฌ์ฉ
- ๐จ ๋์์ด๋ ํ์ : ๊ฐ๋ฐ์์ ๋์์ด๋๊ฐ ๋ถ์ ๊ฐ๋ฅ
- ๐ ๏ธ ์ ์ง๋ณด์ ์ฉ์ด: ๋์์ธ ๋ณ๊ฒฝ์ด ์ฌ์
๐ ์ .blade.php๋ฅผ ์ฌ์ฉํ ๊น์?
HTML vs Blade.php ๋น๊ต
๋จ์ HTML์ ํ๊ณ:
<!-- static.html -->
<h1>์๋
ํ์ธ์ ๊น์ฒ ์๋!</h1>
<p>์ค๋์ 2024๋
11์ 19์ผ์
๋๋ค</p>
โ ๋ฌธ์ ์ : ์ด๋ฆ๊ณผ ๋ ์ง๊ฐ ๊ณ ์ ๋์ด ์์ด์
Blade ํ ํ๋ฆฟ ์์ง์ ํ:
<!-- greeting.blade.php -->
<h1>์๋
ํ์ธ์ ๋!</h1>
<p>์ค๋์ ์
๋๋ค</p>
โ ํด๊ฒฐ: ๋์ ์ผ๋ก ๋ณ์๋ฅผ ์ฒ๋ฆฌํ๊ณ ํจ์๋ฅผ ์คํํ ์ ์์ด์!
๐ฏ ํ ํ๋ฆฟ ์์ง์ ํตํ ๊ธฐ๋ฅ ํ์ฅ
1. ๋ณ์ ์ถ๋ ฅ
// ์์ ํ ๋ณ์ ์ถ๋ ฅ
{!! $htmlContent !!} // HTML ์ฝ๋ ์ง์ ์ถ๋ ฅ
2. ์กฐ๊ฑด๋ฌธ
@if($user->age >= 18)
<p>์ฑ์ธ์
๋๋ค</p>
@else
<p>๋ฏธ์ฑ๋
์์
๋๋ค</p>
@endif
3. ๋ฐ๋ณต๋ฌธ
@foreach($posts as $post)
<h3></h3>
@endforeach
4. ๋ ์ด์์ ์์
@extends('layouts.app')
@section('content')
<h1>ํ์ด์ง ๋ด์ฉ</h1>
@endsection
๐ก ๋จ๊ณ๋ณ ํ์ต ์๋ด
์ด๊ฒ์ ๋ง๋ณด๊ธฐ์ผ ๋ฟ์ ๋๋ค! ๐
๐ฏ ์ง๊ธ ๋จ๊ณ: ๋ทฐ๊ฐ ๋ญ์ง๋ง ์ดํดํ๋ฉด ์ถฉ๋ถํด์ ๐ฑ ๋ค์ ๋จ๊ณ: Blade ๋ฌธ๋ฒ์ ํ๋์ฉ ๋ฐฐ์๋ด์ ๐ ๊ณ ๊ธ ๋จ๊ณ: ๋ณต์กํ ํ ํ๋ฆฟ ์์คํ ๊น์ง ๋ง์คํฐ!
๐ฌ ์ค๋ช : ๋ทฐ๋ฅผ ๋จ์ํ๊ฒ HTML์ด ์๋ blade.php๋ก ํ๋ ๊ฒ์ ํ ํ๋ฆฟ ์์ง์ ํตํ์ฌ ๊ธฐ๋ฅ์ ํ์ฅํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ณด๋ค ์์ธํ ๊ฒ์ ๋์ค์ ๋ค์ ์ค๋ช ํฉ๋๋ค.
๐ ์ถํํฉ๋๋ค!
๐ 5๋ถ๋ง์ ๋ทฐ ๋ง์คํฐ!
์ด์ ์ฌ๋ฌ๋ถ์:
- โ ๋ทฐ๊ฐ ๋ญ์ง ์์์
- โ ๋ทฐ ํ์ผ์ ๋ง๋ค ์ ์์ด์
- โ ๋ผ์ฐํธ์ ๋ทฐ๋ฅผ ์ฐ๊ฒฐํ ์ ์์ด์
- โ ๋ฐ์ดํฐ๋ฅผ ๋ทฐ์ ์ ๋ฌํ ์ ์์ด์
๐ฏ ๋ค์ ๋จ๊ณ
๋ ๋ฉ์ง ์นํ์ด์ง๋ฅผ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด:
๐ฑ ์ด๊ธ - ๋ทฐ ๊ธฐ์ด ์์ ๋ง์คํฐ
- ๋ค์ํ ๋ฐ์ดํฐ ์ ๋ฌ ๋ฐฉ๋ฒ
- ๋ธ๋ ์ด๋ ๋ฌธ๋ฒ ๊ธฐ์ด
- ์ค์ฉ์ ์ธ ์นํ์ด์ง ๋ง๋ค๊ธฐ
๐ก ํ: ๋ทฐ๋ ์น ๊ฐ๋ฐ์ ํต์ฌ์ด์์! HTML์ ์์๊ฒ ๋ง๋๋ ๊ฒ๋ถํฐ ์์ํด์ ์ ์ ๋ณต์กํ ๊ธฐ๋ฅ์ ์ถ๊ฐํด๋ณด์ธ์! ๐