Template_V2

ν…œν”Œλ¦Ώ 문법 v2

라이믹슀 2.1.8λΆ€ν„° 프리뷰 ν˜•μ‹μœΌλ‘œ 제곡되고, 라이믹슀 2.2λΆ€ν„° 정식 지원할 ν…œν”Œλ¦Ώ λ¬Έλ²•μž…λ‹ˆλ‹€.

Laravel Blade 문법을 기반으둜, 라이믹슀의 ꡬ쑰와 κΈ°λŠ₯에 맞게 μ—¬λŸ¬ μ§€μ‹œμž(directive)κ°€ μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
λ˜ν•œ 기쑴의 v1 문법 쀑 μ•ˆμ •μ„±κ³Ό νŽΈλ¦¬ν•¨μ΄ κ²€μ¦λœ μš”μ†Œλ“€λ„ μƒλ‹Ήμˆ˜ κ·ΈλŒ€λ‘œ μœ μ§€ν•˜μ—¬,
ν•„μš”μ— 따라 자유둭게 μ„žμ–΄μ“Έ 수 μžˆμŠ΅λ‹ˆλ‹€.

ν™•μž₯μžλŠ” .htmlκ³Ό .blade.php 쀑 자유둭게 선택할 수 μžˆμŠ΅λ‹ˆλ‹€.
ν›„μžλ₯Ό 선택할 경우, VSCode, PHPStorm, IntelliJ λ“± λŒ€λΆ€λΆ„μ˜ 에디터(IDE)μ—μ„œ
Blade ν”ŒλŸ¬κ·ΈμΈμ„ μ„€μΉ˜ν•˜μ—¬ 문법 ν•˜μ΄λΌμ΄νŒ…κ³Ό μžλ™ μ™„μ„±μ˜ ν˜œνƒμ„ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

v1 문법과 λ‹€λ₯Έ 점

Blade 문법 기반으둜 v1 ν˜Έν™˜ 문법 지원

ν…œν”Œλ¦Ώ 문법 v2λŠ” Blade 10.x와 ν˜Έν™˜λ˜λ„λ‘ ν•˜λŠ” 것을 λͺ©ν‘œλ‘œ 자체 κ΅¬ν˜„λœ ν…œν”Œλ¦Ώ 컴파일러λ₯Ό μ‚¬μš©ν•˜λ©°,
프리뷰 곡개 μ‹œμ  ν˜„μž¬ Blade 10.x의 문법과 κΈ°λŠ₯ 쀑 일뢀λ₯Ό μ œμ™Έν•˜κ³  λŒ€λΆ€λΆ„ μ§€μ›ν•©λ‹ˆλ‹€.

λ™μ‹œμ— v1 λ¬Έλ²•μ²˜λŸΌ HTML νƒœκ·Έλ‚˜ 주석을 μ‚¬μš©ν•˜λŠ” 쑰건문과 λ£¨ν”„λ¬Έμ˜ ν˜•νƒœλ„ μ§€μ›ν•©λ‹ˆλ‹€.
두 κ°€μ§€ 문법은 μ„œλ‘œ μΆ©λŒν•˜μ§€ μ•ŠμœΌλ―€λ‘œ, ν•˜λ‚˜μ˜ ν…œν”Œλ¦Ώ μ—”μ§„μ—μ„œ λ™μ‹œμ— μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ Blade의 ifλ¬Έ μ’Œμš°μ— <!-- --> 주석을 λΆ™μ΄κ±°λ‚˜,
데이터λ₯Ό 좜λ ₯ν•˜λŠ” {{ ... }} λ¬Έλ²•μ—μ„œ μ€‘κ΄„ν˜Έλ₯Ό ν•˜λ‚˜μ”©λ§Œ μ“°λ©΄
λŒ€λΆ€λΆ„μ˜ v1 ν…œν”Œλ¦Ώμ—μ„œ μ΅μˆ™ν•˜κ²Œ 써온 문법이 λ˜λŠ” 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

[v2 μ •κ·œ 문법]
@if ($condition)
    <div class="comment">{{ $comment }}</div>
@endif
[v1 ν˜Έν™˜ 문법]
<!--@if($condition)-->
    <div class="comment">{$comment}</div>
<!--@end-->

μ΄λ ‡κ²Œ v1κ³Ό λΉ„μŠ·ν•œ 점이 λ§Žμ•„ μ μ‘ν•˜κΈ° μ‰½λ‹€λŠ” 것은
라이믹슀의 μ°¨κΈ° ν…œν”Œλ¦Ώ λ¬Έλ²•μœΌλ‘œ Bladeλ₯Ό μ±„νƒν•œ 이유 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€.
κ·ΈλŸ¬λ‚˜ v1 ν˜Έν™˜ 문법은 μ–΄λ””κΉŒμ§€λ‚˜ v1에 μ΅μˆ™ν•œ ν…Œλ§ˆ μ œμž‘μžμ™€ 라이믹슀 μ‚¬μš©μžλ“€μ΄
κΈ°μ‘΄ ν…œν”Œλ¦Ώμ„ λ³€ν™˜ν•˜κ³  μƒˆ ν…œν”Œλ¦Ώ 문법을 λ°°μš°λŠ” 데 도움을 μ£ΌκΈ° μœ„ν•΄ μ§€μ›ν•˜λŠ” κ²ƒμ΄λ―€λ‘œ,
κ°€λŠ₯ν•˜λ©΄ v2 μ •κ·œ λ¬Έλ²•λ§Œμ„ μ‚¬μš©ν•  것을 ꢌμž₯ν•©λ‹ˆλ‹€.

μ•„λž˜μ˜ λ¬Έμ„œμ—μ„œλŠ” Blade μŠ€νƒ€μΌμ˜ 문법을 "v2 μ •κ·œ 문법"으둜,
v1κ³Ό ν˜Έν™˜λ˜κ±°λ‚˜ μœ μ‚¬ν•œ 문법을 "v1 ν˜Έν™˜ 문법"으둜 μ†Œκ°œν•©λ‹ˆλ‹€.

λ¬Έλ§₯에 λ§žλŠ” μžλ™ μ΄μŠ€μΌ€μ΄ν”„

ν…œν”Œλ¦Ώμ—μ„œ 좜λ ₯ν•˜λŠ” λͺ¨λ“  λ°μ΄ν„°λŠ” μžλ™μœΌλ‘œ escape 처리되고, 이 κΈ°λŠ₯을 μΌκ΄„μ μœΌλ‘œ ν•΄μ œν•˜λŠ” μ˜΅μ…˜μ€ μ œκ³΅ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
κΌ­ ν•„μš”ν•œ κ³³μ—μ„œλ§Œ noescape ν•„ν„°λ‚˜ {!! $var !!} 문법을 μ‚¬μš©ν•˜μ—¬ κ°œλ³„μ μœΌλ‘œ ν•΄μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

단, 이미 escape된 데이터λ₯Ό 이쀑 μΈμ½”λ”©ν•˜μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€.

<script> νƒœκ·Έ μ•ˆμ—μ„œ μžλ°”μŠ€ν¬λ¦½νŠΈ λ³€μˆ˜μ— 데이터λ₯Ό 좜λ ₯ν•  λ•ŒλŠ” μžλ™μœΌλ‘œ λ¬Έλ§₯을 μΈμ‹ν•˜μ—¬,
HTML이 μ•„λ‹Œ JS 문법에 λ§žλŠ” ν˜•νƒœλ‘œ escapeν•©λ‹ˆλ‹€.
예λ₯Ό λ“€μ–΄ <λŠ” HTML λ¬Έλ§₯μ—μ„œλŠ” &lt;둜 λ³€ν™˜ν•˜κ³ , JS λ¬Έλ§₯μ—μ„œλŠ” \u003C둜 λ³€ν™˜ν•©λ‹ˆλ‹€.
HTML λ¬Έλ§₯μ—μ„œ JSON을 좜λ ₯ν•  λ•ŒλŠ” λͺ¨λ“  "λ₯Ό &quot;둜 λ³€ν™˜ν•˜μ§€λ§Œ, JS λ¬Έλ§₯μ—μ„œλŠ” κ·ΈλŒ€λ‘œ 좜λ ₯ν•©λ‹ˆλ‹€.

항상 μΌκ΄€μ„±μžˆλŠ” Context μ°Έμ‘°

ν…œν”Œλ¦Ώ v1μ—μ„œλŠ” <?php ?> νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜μ—¬ PHP μ½”λ“œλ₯Ό 직접 μž‘μ„±ν•˜λ©΄
Contextλ₯Ό μ°Έμ‘°ν•˜μ§€ μ•ŠλŠ” 둜컬 λ³€μˆ˜κ°€ μƒμ„±λ˜μ–΄,
{@ ...}와 같은 ν…œν”Œλ¦Ώ λ¬Έλ²•μ—μ„œ μ‚¬μš©ν•˜λŠ” λ³€μˆ˜λ“€κ³Ό μ—°λ™λ˜μ§€ μ•ŠλŠ” 뢈편이 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

ν…œν”Œλ¦Ώ v2μ—μ„œλŠ” ν…œν”Œλ¦Ώ νŒŒμΌμ—μ„œ μ‚¬μš©ν•˜λŠ” λͺ¨λ“  λ³€μˆ˜κ°€ 항상 μΌκ΄€μ„±μžˆκ²Œ Contextλ₯Ό μ°Έμ‘°ν•©λ‹ˆλ‹€.
(μ•„λž˜μ—μ„œ μ„€λͺ…ν•˜λŠ” μ˜ˆμ™Έκ°€ μžˆμœΌλ‚˜, μ˜ˆμ™Έ μ—­μ‹œ 항상 μΌκ΄€μ„±μžˆκ²Œ μ μš©λ©λ‹ˆλ‹€.)

<block>, loop, cond 속성 미지원

XE 1.4.4 버전 이후 μˆ˜λ§Žμ€ ν…œν”Œλ¦Ώ 해석 였λ₯˜μ˜ 원인이 λ˜μ–΄ 온
<block> 가상 νƒœκ·Έ, loop 속성, cond 속성을 μ§€μ›ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
더이상 μž„μ˜μ˜ νƒœκ·Έμ—μ„œ μ΄λŸ¬ν•œ 속성을 μ‚¬μš©ν•  수 μ—†κ³ ,
μ‚¬μš©μ‹œ 좜λ ₯물에 μ†ŒμŠ€κ°€ κ·ΈλŒ€λ‘œ λ‚¨κ±°λ‚˜ 였λ₯˜κ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

<include>μ—μ„œλŠ” cond 속성을 μ§€μ›ν•˜μ§€λ§Œ,
Blade 문법과 μœ μ‚¬ν•œ if, when, unless둜 λ³€κ²½ν•  것을 ꢌμž₯ν•©λ‹ˆλ‹€.

ν•˜λ‚˜μ˜ 속성을 ν‘œμ‹œν• μ§€ μˆ¨κΈΈμ§€ κ²°μ •ν•˜λŠ” |cond="" 문법은 계속 μ§€μ›ν•˜μ§€λ§Œ,
λΆˆκ°€ν”Όν•œ κ²½μš°κ°€ μ•„λ‹ˆλΌλ©΄ λ”μš± κ°•λ ₯ν•œ Blade μŠ€νƒ€μΌμ˜
@class, @style, @selected λ“±μ˜ μ§€μ‹œμžλ₯Ό ν™œμš©ν•  것을 ꢌμž₯ν•©λ‹ˆλ‹€.

κ°•λ ₯ν•œ λΆ€κ°€ κΈ°λŠ₯

λ„€μž„μŠ€νŽ˜μ΄μŠ€λ₯Ό ν¬ν•¨ν•˜κ±°λ‚˜ μ•„μ£Ό κΈ΄ 클래슀λͺ…을 자주 μ°Έμ‘°ν•  경우,
alias μ²˜λ¦¬ν•˜μ—¬ κ°„κ²°ν•˜κ²Œ μ“Έ 수 μžˆμŠ΅λ‹ˆλ‹€.

ν…œν”Œλ¦Ώ νŒŒμΌμ„ μΈν΄λ£¨λ“œν•  λ•Œ λ³€μˆ˜ λͺ©λ‘μ„ ν•¨κ»˜ λ„˜κΈ°λ©΄ 일반 μΈν΄λ£¨λ“œκ°€ μ•„λ‹Œ μ»΄ν¬λ„ŒνŠΈλ‘œ μ·¨κΈ‰ν•˜μ—¬,
Context의 μ „μ—­λ³€μˆ˜λ₯Ό κ³΅μœ ν•˜μ§€ μ•Šκ³  ν•΄λ‹Ή λ³€μˆ˜λ“€λ§Œ μ‚¬μš©ν•˜μ—¬ λ Œλ”λ§ν•˜λ„λ‘ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ½”μ–΄μ—μ„œ 톡합 κ΄€λ¦¬ν•˜λŠ” λ¦¬μ†ŒμŠ€ λ‘œλ”© κΈ°λŠ₯, μƒλŒ€κ²½λ‘œ μžλ™ λ³€ν™˜, 좜λ ₯ ν•„ν„° λ“±
v1의 핡심 κΈ°λŠ₯듀도 λŒ€λΆ€λΆ„ κ·ΈλŒ€λ‘œ κ°€μ Έμ™”μŠ΅λ‹ˆλ‹€.

Laravel Bladeκ°€ μ œκ³΅ν•˜λŠ” @auth, @can λ“±μ˜ μ§€μ‹œμžλ₯Ό 라이믹슀의 κΆŒν•œ 체계에 맞게 μž¬ν•΄μ„ν•˜μ—¬,
κ²Œμ‹œνŒ κ΄€λ¦¬μžμΈμ§€, λŒ“κΈ€ μ“°κΈ° κΆŒν•œμ΄ μžˆλŠ”μ§€ 등을 μ†μ‰½κ²Œ 체크할 수 μžˆμŠ΅λ‹ˆλ‹€.

λΆ€κ°€ κΈ°λŠ₯은 이 맀뉴얼 ν•˜λ‹¨μ—μ„œ 더 μžμ„Ένžˆ μ„€λͺ…ν•©λ‹ˆλ‹€.

버전 ν‘œκΈ° 방법

ν™•μž₯μžκ°€ .blade.php인 ν…œν”Œλ¦Ώ νŒŒμΌμ€ λͺ¨λ‘ v2둜 μΈμ‹ν•©λ‹ˆλ‹€.

ν™•μž₯μžκ°€ .html인 νŒŒμΌμ—μ„œ v2 문법 μ‚¬μš©μ„ μ›ν•œλ‹€λ©΄ μ΅œμƒλ‹¨μ— 버전을 ν‘œκΈ°ν•΄μ•Ό ν•©λ‹ˆλ‹€.
버전 ν‘œκΈ° 방법은 2κ°€μ§€κ°€ μžˆμŠ΅λ‹ˆλ‹€.

[v2 μ •κ·œ 문법]
@version(2)
[v1 ν˜Έν™˜ 문법]
<config version="2" />

데이터 좜λ ₯

λ³€μˆ˜λ‚˜ κ·Έ λ°–μ˜ PHP ν‘œν˜„μ‹μ„ 좜λ ₯ν•  λ•ŒλŠ” 두 쌍의 μ€‘κ΄„ν˜Έλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 Blade λ¬Έλ²•μ˜ ν‘œμ€€μž…λ‹ˆλ‹€.

[v2 μ •κ·œ 문법]
{{ $var }}
{{ $oDocument->getNickName() }}

단, v1처럼 μ€‘κ΄„ν˜Έλ₯Ό ν•˜λ‚˜λ§Œ μ“°λŠ” 것도 ν—ˆμš©ν•©λ‹ˆλ‹€. 이 λ•Œ, μ€‘κ΄„ν˜Έ λ°”λ‘œ μ•ˆμͺ½μ— 곡백이 μžˆμ–΄μ„œλŠ” μ•ˆ λ©λ‹ˆλ‹€.

[v1 ν˜Έν™˜ 문법]
{$var}
{$oDocument->getNickName()}

ν•œ 쌍의 μ€‘κ΄„ν˜Έλ§Œ μ‚¬μš©ν•  λ•ŒλŠ” 클둜져 λ“± μ€‘κ΄„ν˜Έκ°€ ν¬ν•¨λ˜λŠ” μ½”λ“œλ₯Ό μ‚¬μš©ν•  수 μ—†κ³ ,
μ€‘κ΄„ν˜Έ μ•ˆμ—μ„œ μ€„λ°”κΏˆμ„ ν•  수 μ—†λ‹€λŠ” μ œν•œμ΄ μžˆμŠ΅λ‹ˆλ‹€.

v1 ν˜Έν™˜ 문법은 일반적인 CSS, JS 문법과 μΆ©λŒν•˜λŠ” κ²½μš°κ°€ λ§ŽμœΌλ―€λ‘œ,
라이믹슀 2.1.22λΆ€ν„° CSS, JS λ¬Έλ§₯μ—μ„œλŠ” 이 문법을 ν—ˆμš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
μ•„λž˜μ˜ μœ„μΉ˜μ—μ„œλŠ” λ°˜λ“œμ‹œ 두 쌍의 μ€‘κ΄„ν˜Έλ‘œ 데이터λ₯Ό 좜λ ₯ν•΄μ•Ό ν•©λ‹ˆλ‹€.

  • <script> νƒœκ·Έ μ•ˆ
  • <style> νƒœκ·Έ μ•ˆ
  • onclick λ“± 이벀트 ν•Έλ“€λŸ¬λ₯Ό μ„ μ–Έν•˜λŠ” 속성 μ•ˆ
  • <a href="javascript:..."> λ“± JSλ₯Ό μ‚¬μš©ν•˜λŠ” 속성 μ•ˆ
  • λͺ¨λ“  νƒœκ·Έμ˜ style 속성 μ•ˆ
λ³€μˆ˜μ˜ 유효 λ²”μœ„(μŠ€μ½”ν”„)

v1을 염두에 두고 λ§Œλ“€μ–΄μ§„ λ§Žμ€ μžλ£Œλ“€κ³Ό ν˜Έν™˜μ„±μ„ μœ μ§€ν•˜κΈ° μœ„ν•΄,
v2 ν…œν”Œλ¦Ώμ—μ„œ μ‚¬μš©ν•˜λŠ” λ³€μˆ˜λ“€λ„ λͺ¨λ‘ Context와 μ—°λ™λ©λ‹ˆλ‹€.

λͺ¨λ“ˆμ΄λ‚˜ μœ„μ ― λ“±μ—μ„œ Context::set('foo', $value)둜 μ…‹νŒ…ν•˜μ˜€κ±°λ‚˜
$_GET['foo']둜 λ“€μ–΄μ˜¨ URL νŒŒλΌλ―Έν„°μ˜ 값은 ν…œν”Œλ¦Ώμ—μ„œ $foo λ³€μˆ˜λ‘œ μ°Έμ‘°ν•  수 있고,
λ°˜λŒ€λ‘œ ν…œν”Œλ¦Ώμ—μ„œ $fooλΌλŠ” λ³€μˆ˜λ₯Ό μ‘°μž‘ν•˜λ©΄ λ‹€λ₯Έ μžλ£Œμ—μ„œ Context::get('foo')둜 λ³€κ²½λœ 값을 뢈러올 수 μžˆμŠ΅λ‹ˆλ‹€.
즉, Contextλ₯Ό 곡용 state μ €μž₯μ†Œλ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€.

단, μ•„λž˜μ™€ 같은 λ³€μˆ˜λŠ” Context와 μ—°λ™λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

  • λ³€μˆ˜μ™€ ν•¨κ»˜ μΈν΄λ£¨λ“œν•œ ν…œν”Œλ¦Ώ 파일 λ‚΄μ—μ„œ μ‚¬μš©ν•˜λŠ” λ³€μˆ˜ (μΈν΄λ£¨λ“œμ‹œ λ³€μˆ˜ 전달 μ°Έκ³ )
  • $_SERVER, $_SESSION, $GLOBALS λ“±μ˜ μ΄ˆμ „μ—­λ³€μˆ˜(superglobals)
  • Template 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό κ°€λ¦¬ν‚€λŠ” $this
  • λ³€μˆ˜ μ•žμ— \λ₯Ό λΆ™μ—¬ \$foo와 같이 ν‘œκΈ°ν•˜λ©΄ 둜컬 λ³€μˆ˜κ°€ λ©λ‹ˆλ‹€.
    클둜져λ₯Ό μ„ μ–Έν•  λ•Œλ„ 이 방법을 μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

μ•„λž˜μ˜ μ˜ˆμ‹œμ—μ„œ $listλŠ” Context에 μ†Œμ†λœ λ³€μˆ˜μ΄κ³ , \$iλŠ” 클둜져 λ‚΄λΆ€μ—μ„œ μ‚¬μš©ν•˜λŠ” 둜컬 λ³€μˆ˜μž…λ‹ˆλ‹€.

[클둜져 μ‚¬μš© μ˜ˆμ‹œ]
{{ implode(', ', array_map(function(\$i) { return \$i * 1000; }, $list)) }}

[주의]
ν…œν”Œλ¦Ώ μ»΄νŒŒμΌλŸ¬κ°€ λ‚΄λΆ€ 데이터 처리λ₯Ό μœ„ν•΄ μ‚¬μš©ν•˜λŠ” 둜컬 λ³€μˆ˜λŠ” $__tmp λ“± 2개의 μ–Έλ”λ°”λ‘œ μ‹œμž‘ν•˜λŠ” 것이 λ§ŽμŠ΅λ‹ˆλ‹€.
ν…œν”Œλ¦Ώ λ‚΄μ—μ„œ 둜컬 λ³€μˆ˜ μ‚¬μš©μ‹œ 컴파일러 λ‚΄λΆ€ λ³€μˆ˜μ™€ μΆ©λŒν•˜μ§€ μ•Šλ„λ‘, 2개의 μ–Έλ”λ°”λ‘œ μ‹œμž‘ν•˜λŠ” 이름은 ν”Όν•˜μ‹œκΈ° λ°”λžλ‹ˆλ‹€.

좜λ ₯ ν•„ν„°

v1κ³Ό λ™μΌν•œ 좜λ ₯ ν•„ν„°λ₯Ό μ§€μ›ν•©λ‹ˆλ‹€.
v1κ³Ό λ‹€λ₯Έ 점은 ν•„ν„°λ₯Ό κ΅¬λΆ„ν•˜λŠ” | 문자 μ’Œμš°μ— 곡백을 ν—ˆμš©ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

μ•„λž˜μ˜ μ˜ˆμ œλŠ” $varλ₯Ό μ†Œλ¬Έμžλ‘œ λ³€ν™˜ν•˜κ³  escapeν•˜μ—¬ 좜λ ₯ν•©λ‹ˆλ‹€.

{{ $var|lower|escape }}

μ•„λž˜μ˜ μ˜ˆμ œλŠ” νƒ€μž„μŠ€νƒ¬ν”„λ₯Ό νŠΉμ •ν•œ ν˜•νƒœλ‘œ ν¬λ§·ν•˜μ—¬ 좜λ ₯ν•©λ‹ˆλ‹€. ν•„ν„°λͺ…κ³Ό μ˜΅μ…˜μ€ :으둜 κ΅¬λΆ„ν•©λ‹ˆλ‹€.

{{ $timestamp|date:'n/j H:i' }}

ν•„ν„° μ΄μ™Έμ˜ 의미둜 | 문자λ₯Ό μ‚¬μš©ν•  경우, 잘λͺ» ν•΄μ„λ˜μ§€ μ•Šλ„λ‘ μ£Όμ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.
v2 ν…œν”Œλ¦Ώ 문법은 μ•„λž˜μ™€ 같이 3κ°€μ§€ μ˜ˆμ™Έλ₯Ό ν—ˆμš©ν•©λ‹ˆλ‹€.

  • 2개λ₯Ό λΆ™μ—¬ OR의 의미λ₯Ό κ°–λŠ” || μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•  경우
  • λ¬Έμžμ—΄ μ•ˆμ— λ‹¨λ…μœΌλ‘œ λ„£μ–΄ '|'둜 ν‘œκΈ°ν•  경우 (예: join ν•„ν„°μ˜ κ΅¬λΆ„μžλ‘œ μ‚¬μš©ν•  경우)
  • \|둜 μ΄μŠ€μΌ€μ΄ν”„ν•  경우

v2μ—μ„œ μ§€μ›ν•˜λŠ” λͺ¨λ“  ν•„ν„°μ˜ λͺ©λ‘μ€ μ•„λž˜μ˜ ν‘œλ₯Ό μ°Έκ³ ν•˜μ‹­μ‹œμ˜€.

ν•„ν„°λͺ… κΈ°λŠ₯ μ˜΅μ…˜
autoescape μžλ™ escape (이쀑 μΈμ½”λ”©ν•˜μ§€ μ•ŠμŒ)
autolang μžλ™ escapeν•˜λ˜, μ–Έμ–΄μ½”λ“œμΈ 경우 escapeν•˜μ§€ μ•ŠμŒ
escape κ°•μ œ escape (이쀑 인코딩)
noescape escapeν•˜μ§€ μ•ŠμŒ
escapejs JS λ¬Έμžμ—΄μ— 넣을 수 μžˆλŠ” ν˜•νƒœλ‘œ escape
json JSON으둜 인코딩 (JS λ¬Έλ§₯μ—μ„œλŠ” noescape와 ν•¨κ»˜ μ‚¬μš©)
strip strip_tags()
strip_tags strip_tags()
trim trim()
urlencode rawurlencode()
lower μ†Œλ¬Έμžλ‘œ λ³€ν™˜
upper λŒ€λ¬Έμžλ‘œ λ³€ν™˜
nl2br κ°œν–‰ 문자λ₯Ό <br>둜 λ³€ν™˜ (noescape μžλ™ 적용)
join 배열을 λ¬Έμžμ—΄λ‘œ ν•©μΉ¨ κ΅¬λΆ„μž, 기본값은 ,
date νƒ€μž„μŠ€νƒ¬ν”„ 포맷 μ‚¬μš©ν•  포맷, 기본값은 Y-m-d H:i:s
format μˆ«μžμ— 천 λ‹¨μœ„ μ‰Όν‘œ ν‘œμ‹œ μ†Œμˆ˜μ  μ΄ν•˜ 자릿수, 기본값은 0
number_format μœ„μ™€ κ°™μŒ
shorten 숫자λ₯Ό 123.4K와 같은 ν˜•νƒœλ‘œ ν‘œμ‹œ μ†Œμˆ«μ  μ΄ν•˜ 자릿수, 기본값은 2
number_shorten μœ„μ™€ κ°™μŒ
link λ¬Έμžμ—΄μ„ 링크둜 ν‘œμ‹œ (noescape μžλ™ 적용) 링크 ν…μŠ€νŠΈ, 기본값은 원본 λ¬Έμžμ—΄

쑰건문 및 루프문

쑰건문

Blade μŠ€νƒ€μΌμ˜ 쑰건문과 루프문은
PHP의 alternative syntax for control structuresλ₯Ό 기반으둜, μ•žμ— @ 문자λ₯Ό λΆ™μ—¬ κ΅¬λΆ„ν•˜λŠ” 것이 μ›μΉ™μž…λ‹ˆλ‹€.
이것은 XE와 λΌμ΄λ―ΉμŠ€κ°€ κ·Έλ™μ•ˆ 써온 ν…œν”Œλ¦Ώ 문법 v1κ³Ό 맀우 ν‘μ‚¬ν•œλ°,
v1의 쑰건문과 루프문 λ¬Έλ²•μ—μ„œ 쒌우의 주석을 μ§€μš°λ©΄ Blade μŠ€νƒ€μΌμ˜ μ§€μ‹œμž(directive)와 λ™μΌν•œ ν˜•νƒœκ°€ 되기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

μ΄λŸ¬ν•œ μœ μ‚¬μ  덕뢄에, v1처럼 주석을 μ‚¬μš©ν•˜λ”λΌλ„ 정상 μΈμ‹ν•˜λ„λ‘ λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
즉, 쒌우의 주석을 μ‚­μ œν•œ ν›„ λ™μΌν•˜κ²Œ μ²˜λ¦¬ν•©λ‹ˆλ‹€.
@if와 κ΄„ν˜Έ 사이에 띄어쓰기λ₯Ό ν•˜μ§€ μ•Šλ”λΌλ„ λ¬΄λ°©ν•˜κ³ ,
@endifλ₯Ό @end둜 μΆ•μ•½ν•΄μ„œ 써도 λ¬Έμ œκ°€ μ—†μŠ΅λ‹ˆλ‹€.

[v2 μ •κ·œ 문법]
@if ($condition1)
    <div class="foo"></div>
@elseif ($condition2)
    <div class="bar"></div>
@else
    <div class="baz"></div>
@endif
[v1 ν˜Έν™˜ 문법]
<!--@if($condition1)-->
    <div class="foo"></div>
<!--@elseif($condition2)-->
    <div class="bar"></div>
<!--@else-->
    <div class="baz"></div>
<!--@end-->

[주의]
κ΄„ν˜Έλ₯Ό μ‚¬μš©ν•˜λŠ” Blade μŠ€νƒ€μΌμ˜ λͺ¨λ“  μ§€μ‹œμžλŠ” μ •κ·œμ‹(PCRE)을 μ‚¬μš©ν•˜μ—¬ ν•΄μ„λ©λ‹ˆλ‹€.
μ—¬λŠ” κ΄„ν˜Έμ™€ 짝이 λ§žλŠ” κ΄„ν˜Έλ₯Ό μ°ΎλŠ” 것이 이 μ •κ·œμ‹μ˜ 핡심 κΈ°λŠ₯으둜,
λ³΅μž‘ν•œ 자료 ꡬ쑰λ₯Ό μ¦‰μ„μ—μ„œ μ„ μ–Έν•˜κ±°λ‚˜ λ¬Έμžμ—΄ μ•ˆμ— κ΄„ν˜Έλ₯Ό λ„£λŠ” λ“± 해석을 λ°©ν•΄ν•˜λ©΄
v1 ν…œν”Œλ¦Ώμ˜ loop, cond 속성과 λ§ˆμ°¬κ°€μ§€λ‘œ μ˜€μž‘λ™ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
이것은 Laravel Blade 곡식 λ¬Έμ„œμ—μ„œλ„ κ²½κ³ ν•˜κ³  μžˆλŠ” λΆ€λΆ„μž…λ‹ˆλ‹€.
λ³΅μž‘ν•œ 자료 κ΅¬μ‘°λŠ” λ³„λ„λ‘œ μ„ μ–Έν•œ ν›„ λ³€μˆ˜λ§Œ λ„˜κΈ°λŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€.

foreach 루프

λ™μΌν•œ κ·œμΉ™μ„ λ”°λ₯΄λ©°, v1 ν˜Έν™˜ 문법도 λ§ˆμ°¬κ°€μ§€μž…λ‹ˆλ‹€.

[v2 μ •κ·œ 문법]
@foreach ($array as $key => $val)
    <div class="item">{{ $val->name }}</div>
@endforeach

v1μ—μ„œ μ‚¬μš©ν•˜λ˜ <block loop="..."> 문법은 μ§€μ›ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

forelse 루프

Bladeμ—μ„œ λ„μž…ν•œ λ¬Έλ²•μœΌλ‘œ, ifλ¬Έκ³Ό foreach문을 κ²°ν•©ν•œ ν˜•νƒœλ₯Ό λ±λ‹ˆλ‹€.
배열이 λΉ„μ–΄ μžˆλŠ” 경우 ν‘œμ‹œν•  λ‚΄μš©μ„ μ‰½κ²Œ μ§€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
쀑간에 μ‚¬μš©ν•˜λŠ” μ§€μ‹œμžλŠ” @elseκ°€ μ•„λ‹ˆλΌ @emptyμž„μ— μœ μ˜ν•˜μ‹­μ‹œμ˜€.

μœ„μ™€ λ§ˆμ°¬κ°€μ§€λ‘œ, 이것도 μ’Œμš°μ— 주석을 λΆ™μ—¬ v1 λ¬Έλ²•μ²˜λŸΌ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
@endforelse도 @end둜 μΆ•μ•½ν•  수 μžˆμœΌλ‚˜,
얼핏 λ³΄μ•˜μ„ λ•Œ λ‹€λ₯Έ 루프문과 ν˜Όλ™ν•  κ°€λŠ₯성이 μžˆμœΌλ―€λ‘œ μΆ•μ•½ν•˜μ—¬ μ“°λŠ” 것을 ꢌμž₯ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

@forelse ($array as $key => $val)
    <div class="item">{{ $val->name }}</div>
@empty
    <div class="noitem">ν•­λͺ©μ΄ μ—†μŠ΅λ‹ˆλ‹€.</div>
@endforelse
루프 λ³€μˆ˜

foreach 루프, forelse λ£¨ν”„μ—μ„œλŠ” Blade와 같은 루프 λ³€μˆ˜λ₯Ό μ§€μ›ν•©λ‹ˆλ‹€.

λ³€μˆ˜ 속성 νƒ€μž… 의미
$loop->index int ν˜„μž¬ 루프 인덱슀 (0λΆ€ν„° μ‹œμž‘)
$loop->iteration int ν˜„μž¬ 반볡 횟수 (1λΆ€ν„° μ‹œμž‘)
$loop->remaining int 남은 횟수
$loop->count int 총 반볡 횟수
$loop->first bool ν˜„μž¬ 첫 번째 ν•­λͺ©μΈ 경우 μ°Έ
$loop->last bool ν˜„μž¬ λ§ˆμ§€λ§‰ ν•­λͺ©μΈ 경우 μ°Έ
$loop->even bool ν˜„μž¬ 짝수번째 ν•­λͺ©μΈ 경우 μ°Έ
$loop->odd bool ν˜„μž¬ ν™€μˆ˜λ²ˆμ§Έ ν•­λͺ©μΈ 경우 μ°Έ
$loop->depth int μ€‘μ²©λœ λ£¨ν”„λ¬Έμ˜ 깊이
$loop->parent object or null μƒμœ„ 루프 λ³€μˆ˜ (μ΅œμƒμœ„ λ£¨ν”„λŠ” null)

foreachλ¬Έ μ•ˆμ— λ˜λ‹€λ₯Έ foreach문이 μžˆλŠ” 경우 $loop->depthκ°€ 1λΆ€ν„° μ‹œμž‘ν•˜μ—¬ 점점 μ¦κ°€ν•˜λ©°,
μ•ˆμͺ½ 루프 λ³€μˆ˜μ˜ $loop->parentλ₯Ό 톡해 λ°”κΉ₯μͺ½ 루프 λ³€μˆ˜μ— μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.
이 λ³€μˆ˜λ“€μ„ ν™œμš©ν•˜λ©΄ λ³΅μž‘ν•œ 루프문 μ•ˆμ—μ„œ 처음, λ§ˆμ§€λ§‰, n번째, 짝수번째 μ€‘μ˜ λ§ˆμ§€λ§‰ λ“±
λ‹€μ–‘ν•œ 쑰건을 μ‰½κ²Œ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

κ·Έ λ°–μ˜ μ£Όμš” 루프문

forλ¬Έ, whileλ¬Έ, switchλ¬Έ λ“± PHPμ—μ„œ μ§€μ›ν•˜λŠ” 루프문이라면 λͺ¨λ‘ μ‚¬μš©ν•  수 있고,
Blade와 λ§ˆμ°¬κ°€μ§€λ‘œ @continue, @break, @defaultλ₯Ό μ§€μ›ν•˜λ―€λ‘œ
switch문처럼 λ³΅μž‘ν•œ ꡬ쑰의 루프도 PHPλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  ν…œν”Œλ¦Ώ λ¬Έλ²•λ§ŒμœΌλ‘œ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

단, λ³΅μž‘ν•œ λ£¨ν”„λŠ” PHP μ½”λ“œλ₯Ό 직접 μ‚¬μš©ν•˜λŠ” 것이 더 효율적인 κ²½μš°λ„ μžˆμœΌλ‹ˆ
적절히 ν™œμš©ν•˜μ‹œκΈ° λ°”λžλ‹ˆλ‹€.

@for ($i = 0; $i < 10; $i++)
    @if ($condition)
        @continue
    @endif
    <div class="count">{{ $i }}</div>
@endfor
@while (true)
    <div class="forever"></div>
    @if ($condition)
        @break
    @endif
@endwhile
@switch ($color)
    @case ('red')
        <div class="red"></div>
        @break
    @case ('blue')
        <div class="blue"></div>
        @break
    @default
        <div class="default"></div>
@endswitch
편의λ₯Ό μœ„ν•œ 쑰건문

Blade 10.xμ—μ„œ μ§€μ›ν•˜λŠ” 쑰건문은 @hasSection을 μ œμ™Έν•˜κ³  λͺ¨λ‘ μ§€μ›ν•©λ‹ˆλ‹€.
@auth, @can λ“± μΌλΆ€λŠ” 라이믹슀의 κΆŒν•œ 관리 체계에 λ§žμΆ”μ–΄ μž¬ν•΄μ„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

λΌμ΄λ―ΉμŠ€μ—μ„œ μœ μš©ν•˜κ²Œ μ“Έ 수 μžˆλŠ” 쑰건문도 λͺ‡ κ°€μ§€ μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
λ‚΄λΆ€μ μœΌλ‘œλŠ” λͺ¨λ‘ if문으둜 μ»΄νŒŒμΌλ˜λ―€λ‘œ ν•„μš”μ‹œ @elseλ‚˜ @elseifλ₯Ό λΌμ›Œ μ‚¬μš©ν•  수 있고,
λ§ˆμΉ˜λŠ” μ§€μ‹œμžλŠ” λͺ¨λ‘ @end둜 μΆ•μ•½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

@isset ($foo)
    Context에 $foo λ³€μˆ˜κ°€ μ‘΄μž¬ν•©λ‹ˆλ‹€.
@endisset
@unset ($foo)
    Context에 $foo λ³€μˆ˜κ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
@endunset
@empty ($foo)
    Context에 $foo λ³€μˆ˜κ°€ μ‘΄μž¬ν•˜μ§€ μ•Šκ±°λ‚˜, 빈 κ°’μž…λ‹ˆλ‹€.
@endempty
@env ('foo')
    fooλΌλŠ” ν™˜κ²½λ³€μˆ˜($_ENV['foo'])κ°€ μ‘΄μž¬ν•©λ‹ˆλ‹€.
@endenv
@admin
    μ΅œκ³ κ΄€λ¦¬μžμž…λ‹ˆλ‹€.
@endadmin
@auth('admin')
    μ΅œκ³ κ΄€λ¦¬μžμž…λ‹ˆλ‹€.
@endauth
@auth('manager')
    κ²Œμ‹œνŒ κ΄€λ¦¬μžμž…λ‹ˆλ‹€.
@endauth
@auth
    λ‘œκ·ΈμΈν•œ νšŒμ›μž…λ‹ˆλ‹€.
@endauth
@guest
    λ‘œκ·ΈμΈν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.
@endguest
@can ('view')
    글읽기 κΆŒν•œμ΄ μžˆμŠ΅λ‹ˆλ‹€. ($grant->viewκ°€ μžˆμŠ΅λ‹ˆλ‹€.)
@endcan
@cannot ('view')
    글읽기 κΆŒν•œμ΄ μ—†μŠ΅λ‹ˆλ‹€. ($grant->viewκ°€ μ—†μŠ΅λ‹ˆλ‹€.)
@endcannot
@canany (['view', 'write_comment'])
    글읽기, λŒ“κΈ€μ“°κΈ° 쀑 μ΅œμ†Œ 1개의 κΆŒν•œμ΄ μžˆμŠ΅λ‹ˆλ‹€.
@endcanany
@desktop
    PCμž…λ‹ˆλ‹€.
    μ•„λž˜ @mobile @endmobile μ§€μ‹œμžμ˜ λ°˜λŒ€ μ‘°κ±΄μž…λ‹ˆλ‹€.
@enddesktop
@mobile
    λͺ¨λ°”μΌμž…λ‹ˆλ‹€.
    라이믹슀 2.1.21 이전: λͺ¨λ°”일 λ·° μ„€μ •κ³Ό m νŒŒλΌλ―Έν„°μ— 영ν–₯을 λ°›μŠ΅λ‹ˆλ‹€.
    라이믹슀 2.1.22 이후: μ ‘μ†ν•œ User-Agent와 "νƒœλΈ”λ¦Ώλ„ λͺ¨λ°”일 μ·¨κΈ‰" μ„€μ •λ§Œμ„ λ”°λ¦…λ‹ˆλ‹€.
@endmobile

ν…œν”Œλ¦Ώ μΈν΄λ£¨λ“œ

λ‹€λ₯Έ ν…œν”Œλ¦Ώ νŒŒμΌμ„ μΈν΄λ£¨λ“œν•˜λ €λ©΄ @include μ§€μ‹œμžλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
κ²½λ‘œλŠ” ν˜„μž¬ ν…œν”Œλ¦Ώ νŒŒμΌμ„ κΈ°μ€€μœΌλ‘œ ν•˜λŠ” μƒλŒ€κ²½λ‘œμž…λ‹ˆλ‹€.

[v2 μ •κ·œ 문법]
@include ('dir/filename')

단, λ§Žμ€ 디렉토리λ₯Ό 거슬러 μ˜¬λΌκ°€μ•Ό ν•˜λŠ” 경우 ^ 문자λ₯Ό μ‚¬μš©ν•˜μ—¬
라이믹슀 μ„€μΉ˜ 디렉토리λ₯Ό κΈ°μ€€μœΌλ‘œ ν•˜λŠ” 경둜λ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
이것은 CSS, JS λ“±μ˜ λ¦¬μ†ŒμŠ€λ₯Ό λ‘œλ”©ν•  λ•Œλ„ λ™μΌν•©λ‹ˆλ‹€.

[v2 μ •κ·œ 문법]
@include ('^/common/tpl/default_layout')

v1처럼 νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜λŠ” 문법도 ν—ˆμš©ν•˜λ©°, 이 경우 src 속성 λŒ€μ‹  target을 써도 정상 μΈμ‹ν•©λ‹ˆλ‹€.
(HTMLμ—μ„œ 널리 μ‚¬μš©ν•˜λŠ” 속성에 λ‹€λ₯Έ 의미λ₯Ό λΆ€μ—¬ν•˜μ§€ λ§μžλŠ” μ·¨μ§€λ‘œ,
target은 더이상 ꢌμž₯ν•˜μ§€ μ•ŠμœΌλ‚˜ 지원을 μ€‘λ‹¨ν•˜μ§€λŠ” μ•Šμ•˜μŠ΅λ‹ˆλ‹€.)

[v1 ν˜Έν™˜ 문법]
<include src="dir/filename" />
<include target="dir/filename" />
쑰건뢀 μΈν΄λ£¨λ“œ

νŠΉμ • 쑰건이 좩쑱될 λ•Œμ—λ§Œ μΈν΄λ£¨λ“œν•˜λ„λ‘ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • @includeIf : 파일이 μ‘΄μž¬ν•˜λŠ” κ²½μš°μ—λ§Œ μΈν΄λ£¨λ“œν•˜κ³ , μ‘΄μž¬ν•˜μ§€ μ•Šλ”λΌλ„ 였λ₯˜λ₯Ό ν‘œμ‹œν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • @includeWhen : 첫 번째 νŒŒλΌλ―Έν„°λ‘œ μ „λ‹¬ν•œ 쑰건이 참인 κ²½μš°μ—λ§Œ μΈν΄λ£¨λ“œν•©λ‹ˆλ‹€.
  • @includeUnless : 첫 번째 νŒŒλΌλ―Έν„°λ‘œ μ „λ‹¬ν•œ 쑰건이 거짓인 κ²½μš°μ—λ§Œ μΈν΄λ£¨λ“œν•©λ‹ˆλ‹€.
[v2 μ •κ·œ 문법]
@includeIf ('../dir/filename)
@includeWhen ($condition, '../dir/filename')
@includeUnless ($condition, '../dir/filename')

κ·Έ 쀑 2κ°€μ§€ 쑰건은 v1 ν˜Έν™˜ λ¬Έλ²•μœΌλ‘œλ„ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. v1 λ¬Έλ²•μ˜ cond에 ν•΄λ‹Ήν•©λ‹ˆλ‹€.
편의λ₯Ό μœ„ν•΄ when 속성을 cond둜 μ“Έ μˆ˜λ„ 있고, if둜 μ“Έ μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
단, 파일이 μ‘΄μž¬ν•˜λŠ” κ²½μš°μ—λ§Œ μΈν΄λ£¨λ“œν•œλ‹€λŠ” 쑰건은 μ§€μ›ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

[v1 ν˜Έν™˜ 문법]
<include src="../dir/filename" when="$condition">
<include src="../dir/filename" unless="$condition">
μΈν΄λ£¨λ“œμ‹œ λ³€μˆ˜ 전달

λ‹€λ₯Έ ν…œν”Œλ¦Ώμ„ μΈν΄λ£¨λ“œν•  λ•Œ μ—°κ΄€λ°°μ—΄μ΄λ‚˜ 였브젝트λ₯Ό μ „λ‹¬ν•˜λ©΄,
μΈν΄λ£¨λ“œλœ ν…œν”Œλ¦Ώμ€ Contextλ₯Ό μ°Έμ‘°ν•˜μ§€ μ•Šκ³  전달받은 λ°μ΄ν„°λ§Œμ„ μ‚¬μš©ν•˜κ²Œ λ©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ μ•„λž˜μ™€ 같이 A 파일이 B νŒŒμΌμ„ μΈν΄λ£¨λ“œν–ˆμ„ λ•Œ, B 파일 λ‚΄μ˜ $titleκ³Ό $contentλŠ”
일반적인 ν…œν”Œλ¦Ώμ—μ„œμ™€ 달리 Contextλ₯Ό μ°Έμ‘°ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
전달받은 μ—°κ΄€λ°°μ—΄μ˜ ν•΄λ‹Ή ν‚€λ₯Ό μ°Έμ‘°ν•˜λ©°, λ§Œμ•½ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” ν‚€λ₯Ό μ°Έμ‘°ν•  경우 κ²½κ³ κ°€ λ°œμƒν•©λ‹ˆλ‹€.

이 방법을 μ‚¬μš©ν•˜μ—¬ μ™ΈλΆ€μ˜ λ‹€λ₯Έ λ³€μˆ˜μ— 영ν–₯을 λ°›μ§€ μ•ŠλŠ” 독립적인 μ»΄ν¬λ„ŒνŠΈλ₯Ό κ΅¬ν˜„ν•  수 있고,
ν˜ΈμΆœν•˜λŠ” μͺ½μ—μ„œλŠ” ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈ λ‚΄μ—μ„œ μ‚¬μš©ν•˜λŠ” λͺ¨λ“  λ³€μˆ˜λ₯Ό ν†΅μ œν•  수 있게 λ©λ‹ˆλ‹€.

[A.blade.php]

@include ('B', ['title' => '제λͺ©', 'content' => 'λ‚΄μš©'])
[B.blade.php]

<article>
    <h1>{{ $title }}</h1>
    <div class="content">
        {{ $content|noescape }}
    </div>
</article>

λ³€μˆ˜λ₯Ό μ „λ‹¬ν•˜μ—¬ μΈν΄λ£¨λ“œλœ ν…œν”Œλ¦Ώμ—μ„œ λ˜λ‹€λ₯Έ ν…œν”Œλ¦Ώμ„ μΈν΄λ£¨λ“œν•  경우,
μžμ‹ ν…œν”Œλ¦Ώμ€ λΆ€λͺ¨ ν…œν”Œλ¦Ώμ˜ λ³€μˆ˜λ“€μ„ μƒμ†λ°›μŠ΅λ‹ˆλ‹€.
λΆ€λͺ¨ ν…œν”Œλ¦Ώκ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ, μžμ‹ ν…œν”Œλ¦Ώλ„ Contextλ₯Ό μ°Έμ‘°ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ§Œμ•½ μΈν΄λ£¨λ“œν•  λ•Œ λ˜λ‹€μ‹œ λ³€μˆ˜λ₯Ό μ „λ‹¬ν•œλ‹€λ©΄,
μžμ‹ ν…œν”Œλ¦Ώμ€ λΆ€λͺ¨ ν…œν”Œλ¦ΏμœΌλ‘œλΆ€ν„° 상속받은 λ³€μˆ˜λ“€κ³Ό 직접 전달받은 λ³€μˆ˜λ“€μ˜ 합집합을 κ°–κ²Œ 되며,
같은 μ΄λ¦„μ˜ λ³€μˆ˜κ°€ μžˆλ‹€λ©΄ 직접 전달받은 λ³€μˆ˜κ°€ μš°μ„ ν•©λ‹ˆλ‹€.

단, μΈν΄λ£¨λ“œλœ ν…œν”Œλ¦Ώμ—μ„œ Context::get() λ“±μ˜ λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬
μžμ‹ μ΄ 직접 전달받지 μ•Šμ€ μ™ΈλΆ€μ˜ 데이터에 μ ‘κ·Όν•˜λŠ” 것을 λ§‰μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€.
κ·ΈλŸ¬ν•œ μ‹œλ„λ₯Ό ν•  경우 λˆˆμ— 잘 λ„κ²Œ 될 λΏμž…λ‹ˆλ‹€.

v1 ν˜Έν™˜ λ¬Έλ²•μ—μ„œλ„ vars 속성을 μ‚¬μš©ν•˜μ—¬ λ³€μˆ˜λ₯Ό 전달할 수 있고, 쑰건뢀 μΈν΄λ£¨λ“œμ™€ ν•¨κ»˜ μ“Έ μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

[v1 ν˜Έν™˜ 문법]
<include target="filename" vars="$vars" />
<include src="filename" if="$vars" vars="$vars" />

λ¦¬μ†ŒμŠ€ λ‘œλ”©

ν…œν”Œλ¦Ώ 문법을 톡해 λ‹€μ–‘ν•œ λ¦¬μ†ŒμŠ€(μ• μ…‹)의 λ‘œλ”©μ„ μ§€μ›ν•©λ‹ˆλ‹€.

<script> λ˜λŠ” <link> νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜μ—¬ JS 및 CSS νŒŒμΌμ„ 직접 뢈러올 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
κ·ΈλŸ¬λ‚˜ μ—¬λŸ¬ λͺ¨λ“ˆκ³Ό μŠ€ν‚¨ 등을 μ‘°ν•©ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 라이믹슀의 νŠΉμ„±μƒ,
ν…œν”Œλ¦Ώ 문법을 μ‚¬μš©ν•˜μ—¬ μ½”μ–΄μ—μ„œ λ¦¬μ†ŒμŠ€λ₯Ό 톡합 κ΄€λ¦¬ν•˜λ„λ‘ ν•˜λ©΄ μ—¬λŸ¬ κ°€μ§€ μž₯점이 μžˆμŠ΅λ‹ˆλ‹€.

  • μ½”μ–΄μ˜ CSS/JS μ••μΆ• 및 ν•©μΉ˜κΈ° κΈ°λŠ₯κ³Ό μžλ™μœΌλ‘œ μ—°λ™λ©λ‹ˆλ‹€.
  • SCSS, LESS νŒŒμΌμ„ λ‘œλ”©ν•˜λ©΄ μžλ™μœΌλ‘œ 컴파일되고, λ³€μˆ˜λ₯Ό 전달할 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
  • index μ†μ„±μœΌλ‘œ λ‘œλ”© μˆœμ„œλ₯Ό μ‘°μ ˆν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 이미 λ‘œλ”©ν•œ νŒŒμΌμ„ μ–Έλ‘œλ”©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
CSS, SCSS, LESS

CSS λ¦¬μ†ŒμŠ€λ₯Ό λ‘œλ”©ν•˜λ €λ©΄ @load μ§€μ‹œμžλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
λ‘œλ”©ν•  파일의 κ²½λ‘œλŠ” μΈν΄λ£¨λ“œμ™€ λ§ˆμ°¬κ°€μ§€λ‘œ ν˜„μž¬ νŒŒμΌμ„ κΈ°μ€€μœΌλ‘œ ν•œ μƒλŒ€κ²½λ‘œλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ›μΉ™μ΄μ§€λ§Œ,
ν•„μš”μ‹œ ^ 문자둜 λΌμ΄λ―ΉμŠ€κ°€ μ„€μΉ˜λœ 루트 경둜λ₯Ό μ°Έμ‘°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

[v2 μ •κ·œ 문법]
@load ('styles.css')
@load ('styles.css', 'print', 20)

SCSSλ‚˜ LESS도 λ™μΌν•œ λ¬Έλ²•μœΌλ‘œ λ‘œλ”©ν•©λ‹ˆλ‹€. μ½”μ–΄μ—μ„œ μžλ™μœΌλ‘œ μ»΄νŒŒμΌν•˜κ³ , λ³€μˆ˜λ₯Ό 전달할 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

[v2 μ •κ·œ 문법]
@load ('../styles.less')
@load ('css/styles.scss', $vars)

νŒŒλΌλ―Έν„°μ˜ μˆœμ„œλŠ” 파일λͺ…, media, λ‘œλ”© μˆœμ„œ, λ³€μˆ˜ 순이며, media와 λ‘œλ”© μˆœμ„œλŠ” μƒλž΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
단, media와 λ‘œλ”© μˆœμ„œλŠ” 각각 λ¬Έμžμ—΄κ³Ό μ •μˆ˜λ‘œ 전달해야 ν•˜λ©° λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

v1 ν˜Έν™˜ 문법을 μ‚¬μš©ν•˜λ©΄ 각 νŒŒλΌλ―Έν„°μ˜ 역할을 더 λΆ„λͺ…ν•˜κ²Œ ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
(src 속성은 target으둜 써도 정상 μΈμ‹ν•©λ‹ˆλ‹€.)
ν‘œν˜„μƒμ˜ λΆ„λͺ…ν•œ 이점이 μžˆμœΌλ―€λ‘œ, μ΄λŸ¬ν•œ λ¬Έλ²•μ˜ μ‚¬μš©μ„ ꡳ이 ν”Όν•΄μ•Ό ν•  ν•„μš”λŠ” μ—†μŠ΅λ‹ˆλ‹€.

[v1 ν˜Έν™˜ 문법]
<load src="^/modules/foo/bar/styles.scss" media="screen" vars="$vars" />
<load target="../../../styles.css" index="-3" />
JS

CSS와 λ™μΌν•œ λ¬Έλ²•μœΌλ‘œ λ‘œλ”©ν•©λ‹ˆλ‹€. 단, media λŒ€μ‹  type을 μ „λ‹¬ν•˜κ³ , λ³€μˆ˜λ₯Ό μ „λ‹¬ν•˜λŠ” κΈ°λŠ₯은 μ—†μŠ΅λ‹ˆλ‹€.
type은 슀크립트λ₯Ό μ‹€ν–‰ν•  μœ„μΉ˜λ₯Ό μ˜λ―Έν•˜λŠ”λ°, 기본값은 headμž…λ‹ˆλ‹€.

  • head : HTML μ†ŒμŠ€μ˜ <head> 뢀뢄에 μ‚½μž…λ˜μ–΄, λ³Έλ¬Έ λ‘œλ”© μ „ μ‹€ν–‰λ©λ‹ˆλ‹€.
  • body : HTML μ†ŒμŠ€μ˜ <body> ν•˜λ‹¨μ— μ‚½μž…λ˜μ–΄, λ³Έλ¬Έ λ‘œλ”© ν›„ μ‹€ν–‰λ©λ‹ˆλ‹€.
[v2 μ •κ·œ 문법]
@load ('script.js')
@load ('dir/script.js', 'body')
@load ('^/common/js/script.js", 'body', 10)

v1 ν˜Έν™˜ 문법도 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

[v1 ν˜Έν™˜ 문법]
<load src="script.js" type="body" index="10">
<load target="../../foo/script.js" />
JS ν”ŒλŸ¬κ·ΈμΈ

CKEditor λ“± common/js/plugins/ 폴더에 μžˆλŠ” 라이브러리λ₯Ό λ‘œλ”©ν•©λ‹ˆλ‹€.
JSλ₯Ό λ‘œλ”©ν•˜λŠ” 방법과 λ™μΌν•˜λ©°, 라이믹슀 μ„€μΉ˜ μœ„μΉ˜λ₯Ό κΈ°μ€€μœΌλ‘œ ν•˜λŠ” 경둜만 μ •ν™•ν•˜κ²Œ μ§€μ •ν•΄ μ£Όλ©΄ λ©λ‹ˆλ‹€.
(plugin.load 파일이 μžˆλŠ” λ””λ ‰ν† λ¦¬κΉŒμ§€λ§Œ 적으면 λ©λ‹ˆλ‹€.)

[v2 μ •κ·œ 문법]
@load ('^/common/js/plugins/ckeditor/')
[v1 ν˜Έν™˜ 문법]
<load src="^/common/js/plugins/ckeditor/" />
μ–Έμ–΄ 파일

νŠΉμ • λͺ¨λ“ˆ, λ˜λŠ” νŠΉμ •ν•œ 폴더에 μ €μž₯λ˜μ–΄ μžˆλŠ” μ–Έμ–΄ νŒŒμΌμ„ λ‘œλ”©ν•©λ‹ˆλ‹€.
μ–Έμ–΄ νŒŒμΌλ“€μ΄ μ €μž₯λ˜μ–΄ μžˆλŠ” 디렉토리λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.

[v2 μ •κ·œ 문법]
@load ('../lang/')
[v1 ν˜Έν™˜ 문법]
<load src="../lang/" />
기타

XML JS ν•„ν„° λ‘œλ”©μ€ μ§€μ›ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ν…œν”Œλ¦Ώ 문법 v2λ₯Ό μ‚¬μš©ν•˜μ—¬ μ œμž‘ν•˜λŠ” μ‹ κ·œ μžλ£Œμ—μ„œλŠ”
λ£°μ…‹(ruleset)μ΄λ‚˜ XML JS ν•„ν„°λ₯Ό μ‚¬μš©ν•˜λŠ” 것을 ꢌμž₯ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

이미 λ‘œλ”©ν•œ λ¦¬μ†ŒμŠ€λ₯Ό μ–Έλ‘œλ”©ν•˜λ €λ©΄ @unload μ§€μ‹œμž λ˜λŠ” <unload> νƒœκ·Έλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

[v2 μ •κ·œ 문법]
@unload ('foo/bar.js')
[v1 ν˜Έν™˜ 문법]
<unload src="foo/bar.js" />

HTML 속성 μž‘μ„± λ„μš°λ―Έ

class λͺ©λ‘ μž‘μ„±

쑰건에 따라 HTML νƒœκ·Έμ— 각각 λ‹€λ₯Έ class λͺ©λ‘μ„ λ‚˜μ—΄ν•΄μ•Ό ν•˜λŠ” 일이 자주 μžˆμŠ΅λ‹ˆλ‹€.
기쑴의 ν…œν”Œλ¦Ώμ—μ„œλŠ” class 속성 쀑간에 if문을 λΌμ›Œλ„£κ±°λ‚˜,
λ‹€μ–‘ν•œ 경우의 μˆ˜μ— ν•΄λ‹Ήν•˜λŠ” μ—¬λŸ¬ 속성값을 미리 μ€€λΉ„ν•΄ λ‘λŠ” λ“±μ˜ 뢈편이 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

Blade μŠ€νƒ€μΌμ˜ ν…œν”Œλ¦Ώ 문법은 @class μ§€μ‹œμžλ₯Ό μ‚¬μš©ν•˜μ—¬ class λͺ©λ‘μ„ μ†μ‰½κ²Œ μž‘μ„±ν•˜λŠ” 방법을 μ œκ³΅ν•©λ‹ˆλ‹€.

<div @class([
    'project-item',
    'project-complete' => $is_complete,
    'featured' => $is_featured,
    'awarded' => AwardModel::isAwarded($project),
])></div>

@class μ§€μ‹œμžμ— ν•˜λ‚˜μ˜ 배열을 μ „λ‹¬ν•©λ‹ˆλ‹€.
이 λ°°μ—΄μ—λŠ” classλͺ…이 λ‹¨μˆœν•œ κ°’μœΌλ‘œ λ“€μ–΄ μžˆμ„ μˆ˜λ„ 있고, ν‚€/κ°’ ν˜•νƒœλ‘œ λ“€μ–΄ μžˆμ„ μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
μœ„ μ˜ˆμ‹œμ˜ project-item처럼 λ‹¨μˆœν•œ κ°’μœΌλ‘œ λ“€μ–΄ μžˆλŠ” classλͺ…은 κ·ΈλŒ€λ‘œ 좜λ ₯λ©λ‹ˆλ‹€.
반면, ν‚€/κ°’ ν˜•νƒœλ‘œ λ“€μ–΄ μžˆλŠ” 것은 값이 참인 κ²½μš°μ—λ§Œ 좜λ ₯λ©λ‹ˆλ‹€.
참인지 κ±°μ§“μΈμ§€λŠ” 배열에 넣은 λ³€μˆ˜λ‚˜ ν•¨μˆ˜μ˜ 값에 따라 νŒλ‹¨ν•˜λ―€λ‘œ, μ–΄λ–€ λ‘œμ§μ΄λΌλ„ μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ§Œμ•½ μœ„μ˜ μ½”λ“œμ—μ„œ $is_complete와 $is_featuredκ°€ 참이고, λ§ˆμ§€λ§‰ 쑰건이 거짓이라면
μ•„λž˜μ™€ 같은 κ²°κ³Όκ°€ 좜λ ₯될 κ²ƒμž…λ‹ˆλ‹€.

<div class="project-item project-complete featured"></div>
style 속성 μž‘μ„±

μœ„μ™€ λΉ„μŠ·ν•˜κ²Œ @style μ§€μ‹œμžλ₯Ό μ‚¬μš©ν•˜μ—¬ style 속성을 μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

<div @style([
    'background-color: white',
    'border: 2px' => $thickBorder,
    'border: 1px' => $thinBorder,
    'border-radius: 4px' => $isRound,
])></div>

λ§Œμ•½ μœ„μ˜ μ½”λ“œμ—μ„œ $thinBorder만 참이라면, μ•„λž˜μ™€ 같은 κ²°κ³Όκ°€ 좜λ ₯될 κ²ƒμž…λ‹ˆλ‹€.

<div style="background-color: white; border: 1px"></div>

단, λ°˜λ“œμ‹œ ν•„μš”ν•œ 경우λ₯Ό μ œμ™Έν•˜λ©΄ μŠ€νƒ€μΌμ€ λ³„λ„μ˜ CSS λ˜λŠ” SCSS νŒŒμΌμ—μ„œ μž‘μ„±ν•˜λŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€.

λΆˆλ¦¬μ–Έ 속성 μž‘μ„±

<input type="checkbox" checked>μ—μ„œ checked와 같은 속성을 λΆˆλ¦¬μ–Έ(boolean) 속성이라고 ν•©λ‹ˆλ‹€.
일반적으둜 값을 κ°€μ§€μ§€ μ•Šκ³ , 값을 κ°€μ§„λ‹€ 해도 checked="checked"와 같이 이름을 λ°˜λ³΅ν•  뿐이며,
κ°’κ³Ό 관계없이 속성이 μ‘΄μž¬ν•˜λŠ”μ§€ μ•ˆ ν•˜λŠ”μ§€, 0κ³Ό 1만으둜 μƒνƒœλ₯Ό κ΅¬λΆ„ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

ν…œν”Œλ¦Ώ 문법 v1μ—μ„œλŠ” |cond="" 문법을 μ‚¬μš©ν•˜μ—¬ 이런 속성듀을 μ‰½κ²Œ 켜고 끌 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
ν…œν”Œλ¦Ώ 문법 v2μ—μ„œλ„ 같은 문법을 μ§€μ›ν•©λ‹ˆλ‹€.
cond λŒ€μ‹  if, when, unlessλ₯Ό μ‚¬μš©ν•˜μ—¬ 더 κ°„κ²°ν•˜κ²Œ ν‘œν˜„ν•˜κ±°λ‚˜ 쑰건을 뒀집을 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

[v1 ν˜Έν™˜ 문법]
<input type="checkbox" checked|cond="$is_checked">
<input type="text" disabled="disabled"|cond="$is_disabled">
<select>
    <option value="1" selected|cond="$val == 1">ONE</option>
    <option value="2" selected|cond="$val == 2">ONE</option>
    <option value="3" selected|cond="$val == 3">ONE</option>
</select>

κ·ΈλŸ¬λ‚˜ 더 κ°„κ²°ν•œ Blade μŠ€νƒ€μΌμ˜ 문법도 μ§€μ›ν•©λ‹ˆλ‹€.
μ‚¬μš©λ²•μ€ μœ„μ—μ„œ λ³Έ @class와 λΉ„μŠ·ν•˜λ‚˜,
λΆˆλ¦¬μ–Έ λ¬Έλ²•μ—μ„œλŠ” 참인지 거짓인지 νŒλ‹¨ν•  수 μžˆλŠ” ν•˜λ‚˜μ˜ λ³€μˆ˜λ‚˜ ν‘œν˜„μ‹λ§Œ μ „λ‹¬ν•˜λ©΄ λ©λ‹ˆλ‹€.

[v2 μ •κ·œ 문법]
<input type="checkbox" @checked($is_checked)>
<input type="text" @disabled($is_disabled)>
<select>
    <option value="1" @selected($val == 1)>ONE</option>
    <option value="2" @selected($val == 2)>ONE</option>
    <option value="3" @selected($val == 3)>ONE</option>
</select>

λΉ„μŠ·ν•˜κ²Œ ν™œμš©ν•  수 μžˆλŠ” μ§€μ‹œμžλ‘œλŠ” @checked, @selected, @disabled, @readonly, @requiredκ°€ μžˆμŠ΅λ‹ˆλ‹€.
각각 이름과 같은 HTML 속성에 λŒ€μ‘ν•©λ‹ˆλ‹€.
λͺ¨λ‘ HTML νΌμ—μ„œ μž…λ ₯λž€μ˜ μƒνƒœλ₯Ό λ³€κ²½ν•˜λŠ” 데 ν”νžˆ μ‚¬μš©ν•˜λŠ” μ†μ„±λ“€μž…λ‹ˆλ‹€.

Blade μŠ€νƒ€μΌμ˜ 문법이 μ§€μ›ν•˜μ§€ μ•ŠλŠ” 속성에 쑰건을 κ±Έμ–΄μ•Ό ν•œλ‹€λ©΄,
μœ„μ™€ 같은 v1 ν˜Έν™˜ λ¬Έλ²•μ΄λ‚˜ if문을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

PHP μ½”λ“œ μ‚¬μš©

라이믹슀 ν…œν”Œλ¦Ώ v2μ—μ„œ PHP μ½”λ“œλ₯Ό 직접 μ‹€ν–‰ν•˜λŠ” 방법은 3κ°€μ§€κ°€ μžˆμŠ΅λ‹ˆλ‹€.

μ²«μ§ΈλŠ” Blade λ°©μ‹μœΌλ‘œ, @php @endphp μ§€μ‹œμž 사이에 PHP μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

[v2 μ •κ·œ 문법]
@php
    Hello::world();
    $foo = 'bar';
@endphp

λ‘˜μ§ΈλŠ” ν…œν”Œλ¦Ώ 문법 v1μ—μ„œ μ‚¬μš©ν•˜λ˜ λ°©μ‹μœΌλ‘œ, {@ ... } μ•ˆμ— PHP μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.
μ€‘κ΄„ν˜Έλ₯Ό μ‚¬μš©ν•˜λŠ” λ¬Έλ²•μ˜ νŠΉμ„±μƒ, μ€‘κ΄„ν˜Έλ₯Ό ν¬ν•¨ν•˜λŠ” μ½”λ“œλŠ” μž‘μ„±ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

[v1 ν˜Έν™˜ 문법]
{@
    Hello::world();
    $foo = 'bar';
}

μ…‹μ§ΈλŠ” PHP μ–Έμ–΄μ—μ„œ κΈ°λ³Έ μ œκ³΅ν•˜λŠ” <?php ?> νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

[PHP κΈ°λ³Έ 문법]
<?php
    Hello::world();
    $foo = 'bar';
?>

μ„Έ κ°€μ§€ 방법은 100% λ™μΌν•œ 효과λ₯Ό λ‚³μŠ΅λ‹ˆλ‹€.
ν…œν”Œλ¦Ώ 문법 v1κ³Ό 달리, μ–΄λ–€ 방법을 μ‚¬μš©ν•˜λ”λΌλ„ λͺ¨λ“  λ³€μˆ˜λŠ” Contextλ₯Ό μ°Έμ‘°ν•©λ‹ˆλ‹€.
(μΈν΄λ£¨λ“œμ‹œ λ³€μˆ˜λ₯Ό μ „λ‹¬ν•˜μ—¬ ν•΄λ‹Ή λ³€μˆ˜λ§Œ μ‚¬μš©ν•˜λ„λ‘ κ°•μ œν•œ 경우 μ œμ™Έ)

주석

일반적인 HTML 주석은 결과물에 κ·ΈλŒ€λ‘œ 좜λ ₯λ©λ‹ˆλ‹€.
결과물에 ν¬ν•¨λ˜μ§€ μ•ŠλŠ” 주석을 μž‘μ„±ν•˜λ €λ©΄ μ•„λž˜μ˜ 두 κ°€μ§€ 문법 쀑 ν•˜λ‚˜λ₯Ό μ‚¬μš©ν•˜λ©΄ λ©λ‹ˆλ‹€.
μ΄λŸ¬ν•œ 주석은 ν…œν”Œλ¦Ώ 해석 κ³Όμ •μ—μ„œ μ‚­μ œλ©λ‹ˆλ‹€.

[Blade ν˜Έν™˜ 문법]
{{-- 이 주석은 좜λ ₯λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ --}}
[v1 ν˜Έν™˜ 문법]
<!--// 이 주석은 좜λ ₯λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ -->

λΆ€κ°€ κΈ°λŠ₯

클래슀λͺ… 쀄여 μ“°κΈ°

라이믹슀 ν”„λ ˆμž„μ›Œν¬μ™€ μ£Όμš” λͺ¨λ“ˆλ“€μ΄ λ„€μž„μŠ€νŽ˜μ΄μŠ€λ₯Ό λ„μž…ν•˜λ©΄μ„œ,
ν•΄λ‹Ή κΈ°λŠ₯을 κ°€μ Έλ‹€κ°€ μ“°κΈ° μœ„ν•΄ ν˜ΈμΆœν•΄μ•Ό ν•˜λŠ” 클래슀λͺ…이 점점 κΈΈμ–΄μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€.
λ„€μž„μŠ€νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” λͺ¨λ“ˆμ΄λΌλ©΄ use ꡬ문을 μ‚¬μš©ν•˜μ—¬ μ μ ˆν•œ μ΄λ¦„μœΌλ‘œ alias μ²˜λ¦¬ν•  수 μžˆμ§€λ§Œ,
λͺ¨λ“  ν…œν”Œλ¦Ώμ€ μ „μ—­ μŠ€μ½”ν”„μ—μ„œ μ‹€ν–‰λ˜λ―€λ‘œ 이 방법을 μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

κ·Έλž˜μ„œ 라이믹슀 ν…œν”Œλ¦Ώ v2 문법은 클래슀λͺ…을 alias μ²˜λ¦¬ν•˜λŠ” 방법을 μ œκ³΅ν•©λ‹ˆλ‹€.

[v2 μ •κ·œ 문법]
@use('Rhymix\Framework\Filters\HTMLFilter', 'HTMLFilter')
@use('Rhymix\Framework\Mail', 'Mail')

<article>
    {!! HTMLFilter::clean($content) !!}
</article>

@php
    $mail = new Mail();
@endphp

이 κΈ°λŠ₯은 v1 ν˜Έν™˜ 문법 ν˜•νƒœλ‘œλ„ μ œκ³΅λ©λ‹ˆλ‹€. 단, v1에 μ—†λŠ” κΈ°λŠ₯μ΄λ―€λ‘œ μ‹€μ œλ‘œ v1κ³Ό ν˜Έν™˜λ˜μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€.

[v1 ν˜Έν™˜ 문법]
<use class="Rhymix\Framework\Filters\HTMLFilter" as="HTMLFilter" />
<use class="Rhymix\Framework\Mail" as="Mail" />

<article>
    {HTMLFilter::clean($content)|noescape}
</article>

<?php
    $mail = new Mail();
?>

μ‹€μ œλ‘œ μ „μ—­ μŠ€μ½”ν”„μ— aliasκ°€ μƒμ„±λ˜λŠ” 것은 μ•„λ‹™λ‹ˆλ‹€.
ν…œν”Œλ¦Ώ λ‚΄μ—μ„œ ν•΄λ‹Ή λͺ…칭을 μ‚¬μš©ν•˜λŠ” 뢀뢄을 일괄 μΉ˜ν™˜ν•˜λŠ” κ²ƒλΏμ΄λ―€λ‘œ,
μœ μ‚¬ν•œ 이름을 μ—¬λŸ¬ κ°€μ§€ μ‚¬μš©ν•˜λ©΄ μ˜€μž‘λ™ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ¦¬μ†ŒμŠ€ 경둜 μžλ™ μ‘°μ •

ν…œν”Œλ¦Ώ μ†ŒμŠ€μ— ν¬ν•¨λœ 이미지, λ™μ˜μƒ λ“±μ˜ μƒλŒ€κ²½λ‘œλŠ” 해석 κ³Όμ •μ—μ„œ μ ˆλŒ€κ²½λ‘œλ‘œ λ³€ν™˜λ˜μ–΄,
μ‹€μ œ νŽ˜μ΄μ§€κ°€ ν‘œμ‹œλ˜λŠ” λ‹€μ–‘ν•œ URLμ—μ„œ 항상 μ •ν™•ν•œ 경둜λ₯Ό κ°€λ¦¬ν‚€κ²Œ λ©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ modules/board/skins/example/list.blade.phpμ—μ„œ μ•„λž˜μ™€ 같은 μ½”λ“œλ₯Ό μ‚¬μš©ν•˜μ˜€λ‹€λ©΄

<img src="img/icon.png" alt="μ•„μ΄μ½˜" />

해석 및 좜λ ₯ κ³Όμ •μ—μ„œ μ•„λž˜μ™€ 같이 λ³€ν™˜λ©λ‹ˆλ‹€.

<img src="/modules/board/skins/example/img/icon.png" alt="μ•„μ΄μ½˜" />

λ”°λΌμ„œ λ ˆμ΄μ•„μ›ƒμ΄λ‚˜ μŠ€ν‚¨ μ œμž‘μžλŠ” μ‚¬μš©μžκ°€ κ·Έ 자료λ₯Ό μ •ν™•νžˆ μ–΄λ–€ κ²½λ‘œμ— μ„€μΉ˜ν• μ§€ μ‹ κ²½μ“°μ§€ μ•Šκ³ ,
자료 λ‚΄λΆ€μ˜ 디렉토리 ꡬ쑰만 κ°μ•ˆν•˜μ—¬ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©΄ λ©λ‹ˆλ‹€.

이 κΈ°λŠ₯은 λŒ€λΆ€λΆ„μ˜ src 속성, srcset 속성, poster 속성에 μ μš©λ©λ‹ˆλ‹€.

폼 ν•„λ“œ μžλ™ μ£Όμž…

ν…œν”Œλ¦Ώ 문법 v2λŠ” <form> νƒœκ·Έμ— μ‚¬μš©μžκ°€ μž‘μ„±ν•˜μ§€ μ•Šμ€ ν•„λ“œλ₯Ό μž„μ˜λ‘œ μ£Όμž…ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
μ›ν•˜μ§€ μ•ŠλŠ” ν•„λ“œ μ£Όμž…μ„ 막기 μœ„ν•œ rx-autoform 및 no-error-return-url 속성도 ν•„μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

단, @csrf μ§€μ‹œμžλ₯Ό μ‚¬μš©ν•˜μ—¬ CSRF 토큰을 ν¬ν•¨ν•˜λŠ” hidden input을 μ†μ‰½κ²Œ μ£Όμž…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

<form action="{\RX_BASEURL}" method="post">
    @csrf
    ...
</form>
JSON 좜λ ₯

@json을 μ‚¬μš©ν•˜μ—¬ 데이터λ₯Ό JSON으둜 좜λ ₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
json 좜λ ₯ ν•„ν„°λ₯Ό μ‚¬μš©ν•˜λŠ” 것과 λ™μΌν•œ νš¨κ³Όμž…λ‹ˆλ‹€.

HTML의 μΌλΆ€λ‘œ 좜λ ₯ν•˜λŠ”μ§€, μžλ°”μŠ€ν¬λ¦½νŠΈ λ³€μˆ˜λ‘œ 좜λ ₯ν•˜λŠ”μ§€ μžλ™μœΌλ‘œ νŒλ‹¨ν•˜μ—¬
각각 λ¬Έλ§₯에 λ§žλŠ” ν˜•νƒœλ‘œ μΈμ½”λ”©ν•©λ‹ˆλ‹€.
예λ₯Ό λ“€μ–΄ HTML μ†μ„±μ—μ„œλŠ” "λ₯Ό &quot;둜 인코딩해야 ν•˜μ§€λ§Œ, JS λ³€μˆ˜μ—μ„œλŠ” "λ₯Ό κ·ΈλŒ€λ‘œ λ‘‘λ‹ˆλ‹€.

[HTML λ¬Έλ§₯]
<div class="foo" data-params="@json($params)"></div>
[JS λ¬Έλ§₯]
<script>
    const params = @json($params);
</script>
λ²ˆμ—­λ¬Έ λ‘œλ”©

@lang을 μ‚¬μš©ν•˜μ—¬ ν˜„μž¬ μ‚¬μš©μ€‘μΈ μ–Έμ–΄μ˜ λ²ˆμ—­λ¬Έμ„ μ‰½κ²Œ 뢈러올 수 μžˆμŠ΅λ‹ˆλ‹€.
라이믹슀의 lang() μ „μ—­ ν•¨μˆ˜μ™€ λ™μΌν•œ κΈ°λŠ₯으둜, λ‹€λ₯Έ λͺ¨λ“ˆμ˜ μ–Έμ–΄ νŒŒμΌλ„ 뢈러올 수 있기 λ•Œλ¬Έμ—
v1 ν…œν”Œλ¦Ώμ—μ„œ 자주 λ³΄μ΄λŠ” {$lang->foo}보닀 κ°•λ ₯ν•©λ‹ˆλ‹€.

일반적인 λ°©λ²•μœΌλ‘œ μ‚¬μš©ν•  경우, ν•΄λ‹Ή λ©”μ‹œμ§€λ₯Ό μ„ μ–Έν•œ λͺ¨λ“ˆμ΄ 아직 λ‘œλ”©λ˜μ§€ μ•Šμ•˜λ‹€λ©΄ λ²ˆμ—­μ΄ λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

@lang('msg_file_not_found')

κ·ΈλŸ¬λ‚˜ μ•„λž˜μ™€ 같이 λͺ¨λ“ˆλͺ…을 μ§€μ •ν•˜μ—¬ μ‚¬μš©ν•˜λ©΄, file λͺ¨λ“ˆμ΄ λ‘œλ”©λ˜μ§€ μ•Šμ•˜λ”λΌλ„ κ°•μ œ λ‘œλ”© ν›„ λ²ˆμ—­ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
νŠΉμ • 경둜의 μ–Έμ–΄ νŒŒμΌμ„ λ³„λ„λ‘œ λΆˆλŸ¬μ˜€λŠ” ν•¨μˆ˜λ‚˜ μ§€μ‹œμžλ₯Ό μ‚¬μš©ν•  ν•„μš”κ°€ μ—†λŠ” κ²ƒμž…λ‹ˆλ‹€.

@lang('file.msg_file_not_found')
URL 생성

@url을 μ‚¬μš©ν•˜λ©΄ getUrl()λ₯˜μ˜ ν•¨μˆ˜λ₯Ό μ‰½κ²Œ ν˜ΈμΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€.
λ¬Έλ§₯에 맞게 μΈμ½”λ”©λœ κ²°κ³Όλ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.

μ‹ κ·œ μžλ£Œμ—μ„œλŠ” μ—°κ΄€λ°°μ—΄ ν˜•νƒœλ₯Ό μ‚¬μš©ν•  것을 ꢌμž₯ν•©λ‹ˆλ‹€.

@url('')
@url('act', 'dispMemberInfo')
@url('', 'mid', $mid, 'act', 'dispBoardWrite')
@url(['mid' => $mid, 'act' => 'dispBoardWrite'])
μœ„μ ― μ‚½μž…

@widget을 μ‚¬μš©ν•˜λ©΄ ν˜„μž¬ μœ„μΉ˜μ— μœ„μ ―μ„ μ‚½μž…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μ˜ˆμ „ λ°©μ‹μ˜ μœ„μ ― νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜λŠ” 것보닀 κ°„κ²°ν•˜κ³ , μœ„μ ―μ— 전달할 λ³€μˆ˜λ₯Ό μ»€μŠ€ν„°λ§ˆμ΄μ§•ν•˜κΈ°λ„ νŽΈλ¦¬ν•©λ‹ˆλ‹€.

@widget('content', $args)

μœ„μ ―μ— μ „λ‹¬ν•˜λŠ” $argsλŠ” λ°°μ—΄μ΄λ‚˜ μ˜€λΈŒμ νŠΈμ—¬μ•Ό ν•˜κ³ , skin λ“± ν•΄λ‹Ή μœ„μ ―μ„ λ Œλ”λ§ν•˜λŠ” 데 ν•„μš”ν•œ
λ³€μˆ˜λ“€μ„ ν¬ν•¨ν•˜κ³  μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

기타 μœ μš©ν•œ μ§€μ‹œμž
@dump, @dd

@dumpλ₯Ό μ‚¬μš©ν•˜λ©΄ 1개 λ˜λŠ” μ—¬λŸ¬ 개의 λ³€μˆ˜λ₯Ό var_dump()ν•©λ‹ˆλ‹€. ν”νžˆ "λ³€μˆ˜λ₯Ό 찍어본닀"라고 ν•˜λŠ” 디버깅 μž‘μ—…μž…λ‹ˆλ‹€.

@dump($var);
@dump($foo, $bar)

@ddλ₯Ό μ‚¬μš©ν•˜λ©΄ λ³€μˆ˜λ₯Ό var_dump()ν•œ ν›„ κ°•μ œμ’…λ£Œν•©λ‹ˆλ‹€. ("Dump and Die"의 μ€„μž„λ§μ΄λΌκ³  ν•©λ‹ˆλ‹€.)

@dd($var)
@dd($foo, $bar)
@once ... @endonce

@once ... @endonce에 λ‘˜λŸ¬μ‹ΈμΈ ν…œν”Œλ¦Ώ μ½”λ“œλŠ” λ£¨ν”„λ‚˜ μΈν΄λ£¨λ“œλ‘œ 인해 μ—¬λŸ¬ 번 ν˜ΈμΆœλ˜λ”λΌλ„ 1번만 μ‹€ν–‰λ©λ‹ˆλ‹€.
νŠΉμ •ν•œ 라이브러리λ₯Ό λ‘œλ”©ν•˜λŠ” μ½”λ“œ λ“±, μ—¬λŸ¬ 번 μ‹€ν–‰λ˜μ–΄μ„œλŠ” κ³€λž€ν•œ κ²½μš°μ— μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

@once
    ... μ™ΈλΆ€ 라이브러리 λ‘œλ”© λ˜λŠ” μ΄ˆκΈ°ν™” μž‘μ—… ...
@endonce
@error ... @enderror

νŠΉμ •ν•œ μ΄λ¦„μ˜ validation μ—λŸ¬κ°€ μžˆλŠ” 경우λ₯Ό μ˜λ―Έν•˜λŠ” μ‘°κ±΄λ¬Έμž…λ‹ˆλ‹€.
ν•„μš”μ‹œ @elseλ‚˜ @elseifλ₯Ό λΌμ›Œλ„£μ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

[v2 μ •κ·œ 문법]
@error ('modules/foo/tpl/1')
    μ—λŸ¬κ°€ μžˆμŠ΅λ‹ˆλ‹€.
@enderror

μœ„μ˜ μ½”λ“œλŠ” ν”νžˆ μ‚¬μš©ν•˜λŠ” μ•„λž˜μ˜ μ½”λ“œμ™€ λ™μΌν•œ κΈ°λŠ₯μž…λ‹ˆλ‹€.

[v1 μ½”λ“œ μ˜ˆμ‹œ]
<!--@if($XE_VALIDATOR_ID == 'modules/foo/tpl/1' && $XE_VALIDATOR_MESSAGE)-->
    μ—λŸ¬κ°€ μžˆμŠ΅λ‹ˆλ‹€.
<!--@endif-->

μ‹€μ œ μ—λŸ¬ λ©”μ‹œμ§€ λ‚΄μš©μ€ μ—¬μ „νžˆ $XE_VALIDATOR_MESSAGE λ³€μˆ˜μ— 담겨 μžˆμŠ΅λ‹ˆλ‹€.

@verbatim ... @endverbatim

@verbatim ... @endverbatim에 λ‘˜λŸ¬μ‹ΈμΈ λΆ€λΆ„μ˜ ν…œν”Œλ¦Ώ μ½”λ“œλŠ” ν•΄μ„ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

@verbatim
    @if ($foo)
        {{ $bar }}
    @endif
@endverbatim

μœ„μ˜ μ˜ˆμ‹œμ—μ„œ 쑰건문은 μ‹€ν–‰λ˜μ§€ μ•Šκ³ , $bar λ³€μˆ˜μ˜ λ‚΄μš©μ΄ 좜λ ₯λ˜μ§€λ„ μ•ŠμŠ΅λ‹ˆλ‹€.
마치 이 λ§€λ‰΄μ–Όμ²˜λŸΌ ν…œν”Œλ¦Ώ μ½”λ“œκ°€ κ·ΈλŒ€λ‘œ 좜λ ₯λ©λ‹ˆλ‹€.
ν…œν”Œλ¦Ώ μ½”λ“œ κ·Έ 자체λ₯Ό ν”„λ‘ νŠΈμ—”λ“œμ— μ „λ‹¬ν•˜λ €κ³  ν•˜λŠ” 경우 μœ μš©ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

@fragment ... @endfragment

@fragment ... @endfragment에 λ“€λŸ¬μ‹ΈμΈ ν…œν”Œλ¦Ώ μ½”λ“œλŠ”
ν…œν”Œλ¦Ώμ„ μ»΄νŒŒμΌν•˜κ³  μ‹€ν–‰ν•  λ•ŒλŠ” 별닀λ₯Έ νŠΉμƒ‰ 없이 κ·ΈλŒ€λ‘œ 좜λ ₯λ˜μ§€λ§Œ,
싀행이 λλ‚œ ν›„ ν•΄λ‹Ή λΆ€λΆ„λ§Œ λ³„λ„λ‘œ μΆ”μΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€.

@fragment ('foo')
    이 λΆ€λΆ„λ§Œ μΆ”μΆœν•΄ λ³Όκ²Œμš”
@endfragment
@fragment ('bar')
    이 뢀뢄도 λ”°λ‘œ κ°€μ Έμ˜¬ 수 μžˆμ–΄μš”
@endfragment
$template = new Rhymix\Framework\Template('dir', 'filename');
$output = $template->compile();
$foo = $template->getFragment('foo')
$bar = $template->getFragment('bar')
@push, @prepend, @stack

@push와 @prependλŠ” @fragment처럼 좜λ ₯물의 일뢀뢄을 μΆ”μΆœν•˜λŠ” 데 μ‚¬μš©ν•˜μ§€λ§Œ,
ν•˜λ‚˜μ˜ μ΄λ¦„μœΌλ‘œ ν•˜λ‚˜μ˜ λ‚΄μš©λ§Œ μ €μž₯ν•  수 μžˆλŠ” @fragment와 달리,
같은 μ΄λ¦„μœΌλ‘œ μΆ”μΆœν•œ λ‚΄μš©μ„ 계속 덧뢙일 수 μžˆμŠ΅λ‹ˆλ‹€.

@push ('foo')
    이 λ‚΄μš©μ„ μΆ”κ°€ν• κ²Œμš”.^^
@endpush
@push ('foo')
    이 λ‚΄μš©λ„ μΆ”κ°€ν•˜κ³  μ‹Άμ–΄μš”~
@endpush
@push ('foo')
    이 λ‚΄μš©λ„ μžˆμ–΄μš”!
@endpush

μ΄λ ‡κ²Œ μ—¬λŸ¬ μ°¨λ‘€ λ‚΄μš©μ„ μΆ”κ°€ν•œ ν›„, @stack을 μ‚¬μš©ν•˜μ—¬ κ°€μ Έμ˜¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

@stack ('foo')

μ΄λ ‡κ²Œ ν•˜λ©΄ μ§€κΈˆκΉŒμ§€ μŒ“μΈ λ‚΄μš©μ΄ λͺ¨λ‘ 좜λ ₯λ©λ‹ˆλ‹€.

이 λ‚΄μš©μ„ μΆ”κ°€ν• κ²Œμš”.^^
이 λ‚΄μš©λ„ μΆ”κ°€ν•˜κ³  μ‹Άμ–΄μš”~
이 λ‚΄μš©λ„ μžˆμ–΄μš”!

@prepend도 λΉ„μŠ·ν•œ κΈ°λŠ₯μ΄μ§€λ§Œ, @push와 달리 λ‚΄μš©μ„ μ•žμ— λΌμ›Œλ„£μŠ΅λ‹ˆλ‹€.
@prepend둜 μΆ”κ°€ν•œ λ‚΄μš©μ€ @stack을 ν˜ΈμΆœν–ˆμ„ λ•Œ μ—­μˆœμœΌλ‘œ λ‚˜μ˜΅λ‹ˆλ‹€.
같은 μ΄λ¦„μœΌλ‘œ @push와 @prependλ₯Ό λ²ˆκ°ˆμ•„ μ‚¬μš©ν•˜μ—¬
μ–΄λ–€ 것은 뒀에, μ–΄λ–€ 것은 μ•žμ— λΌμ›Œλ„£λ„λ‘ ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

@pushIf와 @prependIfλŠ” μ‘°κ±΄λΆ€λ‘œ λ‚΄μš©μ„ μΆ”μΆœν•©λ‹ˆλ‹€.

@pushIf ($condition, 'foo')
    쑰건이 참이어야 이 λ‚΄μš©μ΄ μΆ”κ°€λ©λ‹ˆλ‹€.
@endPushIf
@prependIf ($condition, 'foo')
    쑰건이 참이어야 이 λ‚΄μš©μ„ μ•žμ— λΌμ›Œλ„£μŠ΅λ‹ˆλ‹€.
@endPrependIf

@pushOnce와 @prependOnceλŠ” 이미 μΆ”κ°€ν•œ λ‚΄μš©μ„ μ€‘λ³΅μœΌλ‘œ μΆ”κ°€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

Laravelμ—μ„œλŠ” CSS, JS λ‘œλ”©ν•˜λŠ” μ½”λ“œλ₯Ό @push둜 μΆ”κ°€ν•˜κ³ ,
λ§ˆμ§€λ§‰μ— λ ˆμ΄μ•„μ›ƒμ—μ„œ @stack으둜 ν•œ λ²ˆμ— λΆˆλŸ¬μ˜€λŠ” 방법을 μΆ”μ²œν•©λ‹ˆλ‹€.
κ·ΈλŸ¬λ‚˜ λΌμ΄λ―ΉμŠ€μ—μ„œλŠ” CSS, JS λ¦¬μ†ŒμŠ€λ₯Ό κ΄€λ¦¬ν•˜λŠ” λ‹€λ₯Έ 방법이 μžˆμœΌλ―€λ‘œ,
이런 μš©λ„λ‘œ @stack을 μ‚¬μš©ν•  ν•„μš”λŠ” μ—†μŠ΅λ‹ˆλ‹€.

미지원 κΈ°λŠ₯

ν…œν”Œλ¦Ώ 문법 v2λŠ” Blade 10.x의 문법과 μ§€μ‹œμžλ₯Ό λŒ€λΆ€λΆ„ κ·ΈλŒ€λ‘œ λ”°λ₯΄κ³ ,
λΌμ΄λ―ΉμŠ€μ— ν•„μš”ν•œ μ§€μ‹œμžμ™€ v1 ν˜Έν™˜ 문법을 μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.

단, Laravel Bladeλ₯Ό κ·ΈλŒ€λ‘œ μ‚¬μš©ν•˜λŠ” 것은 μ•„λ‹ˆλΌλŠ” 점에 μœ μ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.
PHP 지원 λ²”μœ„ 문제, μ„œλ‘œ λ‹€λ₯Έ 좜처의 μ—¬λŸ¬ λͺ¨λ“ˆκ³Ό μŠ€ν‚¨ 등을 μ‘°ν•©ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 라이믹슀의 νŠΉμ„±,
Context λ³€μˆ˜ μ°Έμ‘° 문제, 일뢀 v1 문법 μœ μ§€ λ“±μ˜ 이유둜
Laravel ν”„λ ˆμž„μ›Œν¬μ˜ μ½”λ“œλ₯Ό κ·ΈλŒ€λ‘œ μ‚¬μš©ν•˜κΈ°μ—λŠ” 어렀움이 μžˆμ–΄,
"Blade μŠ€νƒ€μΌ"의 λ¬Έλ²•λ§Œ μ°¨μš©ν•˜κ³  μ‹€μ œ μ»΄νŒŒμΌλŸ¬λŠ” 자체 κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€.
λ”°λΌμ„œ 세뢀적인 해석 λ°©μ‹μ—μ„œ Laravel Blade와 차이가 μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

특히 Blade 10.x의 κΈ°λŠ₯ 쀑 ν…œν”Œλ¦Ώ 상속 및 μ»΄ν¬λ„ŒνŠΈν™”μ™€ κ΄€λ ¨λœ μ§€μ‹œμžλŠ” μ μš©λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.
@extends, @yield, @section, @show, @inject, @slot 등이 여기에 ν•΄λ‹Ήλ©λ‹ˆλ‹€.

ν•˜λ‚˜μ˜ κ°œλ°œνŒ€μ΄ ν•˜λ‚˜μ˜ μ½”λ“œλ² μ΄μŠ€λ₯Ό 톡합 κ΄€λ¦¬ν•œλ‹€κ³  κ°€μ •ν•˜λŠ” λŒ€λ‹€μˆ˜μ˜ μ›Ή ν”„λ ˆμž„μ›Œν¬μ™€ 달리,
λΌμ΄λ―ΉμŠ€λŠ” 각각의 λͺ¨λ“ˆκ³Ό μŠ€ν‚¨μ„ λ…λ¦½μ μœΌλ‘œ κ°œλ°œν•˜κ³  λ…λ¦½μ μœΌλ‘œ 배포할 수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.
μ „λ¬Έ κ°œλ°œμžκ°€ μ•„λ‹Œ μ‚¬μš©μžλ‚˜ 자료 μ œμž‘μžκ°€ 많기 λ•Œλ¬Έμ—,
단지 μŠ€ν‚¨μ—μ„œ μ‚¬μš©ν•  μ»΄ν¬λ„ŒνŠΈλ₯Ό μ œμž‘ν•˜κΈ° μœ„ν•΄ λ³„λ„μ˜ .php νŒŒμΌμ—μ„œ 클래슀λ₯Ό μ„ μ–Έν•΄μ•Ό ν•˜κ±°λ‚˜
ν„°λ―Έλ„μ—μ„œ λͺ…령을 μ‹€ν–‰ν•΄μ•Ό ν•˜λŠ” 개발 방식은 받아듀이기 κ³€λž€ν•©λ‹ˆλ‹€.

이런 νŠΉμ„±μ„ κ³ λ €ν•  λ•Œ Laravel Blade의 μ»΄ν¬λ„ŒνŠΈ μ„€κ³„λŠ” λΌμ΄λ―ΉμŠ€μ™€ λ§žμ§€ μ•Šλ‹€κ³  νŒλ‹¨ν•˜μ˜€μœΌλ©°,
μ μ ˆν•œ λŒ€μ•ˆμ„ λ§ˆλ ¨ν•  λ•ŒκΉŒμ§€ μ»΄ν¬λ„ŒνŠΈ κ΄€λ ¨ κΈ°λŠ₯의 μ μš©μ€ 보λ₯˜ν•©λ‹ˆλ‹€.

단, μΈν΄λ£¨λ“œμ‹œ λ³€μˆ˜ 전달 κΈ°λŠ₯을 ν™œμš©ν•˜μ—¬
μƒλ‹Ήνžˆ 독립적인 μ»΄ν¬λ„ŒνŠΈμ™€ 같은 ν…œν”Œλ¦Ώμ„ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
클래슀λ₯Ό μ„ μ–Έν•˜μ—¬ μ‚¬μš©ν•œλ‹€λŠ” μ μ—μ„œ μœ„μ ―μ˜ 역할과도 κ²ΉμΉ˜λŠ” 면이 μžˆμœΌλ―€λ‘œ,
λ³΅μž‘ν•œ κΈ°λŠ₯이 ν•„μš”ν•œ μ»΄ν¬λ„ŒνŠΈλŠ” μœ„μ ―μ„ ν™œμš©ν•˜λŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€.