파서 보기
View Parser는 뷰 파일에 포함된 의사 변수에 대한 간단한 텍스트 대체를 수행할 수 있습니다. 간단한 변수나 변수 태그 쌍을 구문 분석할 수 있습니다.
의사 변수 이름이나 제어 구문은 this::처럼 중괄호로 묶습니다.
<html>
<head>
<title>{blog_title}</title>
</head>
<body>
<h3>{blog_heading}</h3>
{blog_entries}
<h5>{title}</h5>
<p>{body}</p>
{/blog_entries}
</body>
</html>
이러한 변수는 실제 PHP 변수가 아니라 템플릿(파일 보기)에서 PHP를 제거할 수 있는 일반 텍스트 표현입니다.
참고
CodeIgniter에서는 보기 페이지에서 순수 PHP를 사용하면(예: View renderer 사용) 이 클래스를 좀 더 빠르게 실행할 수 있으므로 이 클래스를 사용할 필요가 없습니다. 그러나 일부 개발자는 PHP 작업에 혼란을 느낄 것이라고 생각하는 디자이너와 작업하는 경우 특정 형태의 템플릿 엔진을 사용하는 것을 선호합니다.
뷰 파서 클래스 사용
파서 클래스를 로드하는 가장 간단한 방법은 해당 서비스를 이용하는 것입니다.
<?php
$parser = service('parser');
또는 Parser 클래스를 기본 렌더러로 사용하지 않는 경우 직접 인스턴스화할 수 있습니다.
<?php
$parser = new \CodeIgniter\View\Parser();
그런 다음 제공되는 세 가지 표준 렌더링 방법인 render(), setVar() 및 setData() 중 하나를 사용할 수 있습니다. setDelimiters() 메소드를 통해 구분 기호를 직접 지정할 수도 있습니다.
중요
Parser을 사용하면 뷰 템플릿은 파서 자체에 의해서만 처리되며 기존 뷰 PHP 스크립트와는 다릅니다. 이러한 스크립트의 PHP 코드는 파서에서 무시되며 대체만 수행됩니다.
이것은 목적이 있습니다: PHP 없이 파일을 봅니다.
그것이 하는 일
Parser 클래스는 애플리케이션의 보기 경로에 저장된 “PHP/HTML 스크립트”를 처리합니다. 이 스크립트에는 PHP가 포함될 수 없습니다.
각 보기 매개변수(의사 변수라고 함)는 제공한 값 유형에 따라 대체를 트리거합니다. 의사 변수는 PHP 변수로 추출되지 않습니다. 대신 해당 값은 의사 변수 구문을 통해 액세스되며 해당 이름은 중괄호 안에서 참조됩니다.
Parser 클래스는 내부적으로 연관 배열을 사용하여 render()을 호출할 때까지 의사 변수 설정을 축적합니다. 이는 의사 변수 이름이 고유해야 함을 의미합니다. 그렇지 않으면 이후 매개변수 설정이 이전 매개변수 설정을 재정의합니다.
이는 스크립트 내부의 다양한 컨텍스트에 대한 이스케이프 매개변수 값에도 영향을 미칩니다. 이스케이프된 각 값에 고유한 매개변수 이름을 지정해야 합니다.
파서 템플릿
render() 메소드를 사용하여 다음과 같이 간단한 템플릿을 구문 분석(또는 렌더링)할 수 있습니다.
<?php
$data = [
'blog_title' => 'My Blog Title',
'blog_heading' => 'My Blog Heading',
];
return $parser->setData($data)->render('blog_template');
보기 매개변수는 템플릿에서 대체될 데이터의 연관 배열로 setData()에 전달됩니다.
위의 예에서 템플릿에는 {blog_title} 및 {blog_heading}의 두 가지 변수가 포함됩니다.
render()의 첫 번째 매개변수에는 템플릿 이름이 포함됩니다. 여기서 blog_template은 보기 템플릿 파일의 이름입니다.
중요
파일 확장자를 생략하면 뷰는 .php 확장자로 끝날 것으로 예상됩니다.
파서 구성 옵션
여러 옵션을 render() 또는 renderString() 메서드에 전달할 수 있습니다.
cache- 보기 결과를 저장하는 시간(초)입니다.renderString()동안 무시됨cache_name- 캐시된 보기 결과를 저장/검색하는 데 사용되는 ID입니다. 기본값은 뷰 경로입니다. renderString()에서는 무시됩니다.saveData- 후속 호출을 위해 뷰 데이터 매개변수를 유지해야 하는 경우 true입니다. 기본값은 true입니다.cascadeData- 의사 변수 설정을 중첩된 대체 항목에 전달해야 하는 경우 true입니다. 기본값은 true입니다.
<?php
return $parser->render('blog_template', [
'cache' => HOUR,
'cache_name' => 'something_unique',
]);
대체 변형
지원되는 대체 유형에는 단순, 반복, 중첩의 세 가지 유형이 있습니다. 대체는 의사 변수가 추가된 것과 동일한 순서로 수행됩니다.
파서가 수행하는 간단한 대체는 다음 예와 같이 해당 데이터 매개변수가 스칼라 또는 문자열 값을 갖는 의사 변수의 일대일 대체입니다.
<?php
$template = '<head><title>{blog_title}</title></head>';
$data = ['blog_title' => 'My ramblings'];
return $parser->setData($data)->renderString($template);
// Result: <head><title>My ramblings</title></head>
Parser은 중첩된 대체 또는 루핑에 사용되는 “변수 쌍”과 조건부 대체를 위한 일부 고급 구성을 사용하여 훨씬 더 많은 대체를 수행합니다.
파서가 실행되면 일반적으로
조건부 대체 처리
중첩/루핑 대체 처리
나머지 단일 대체 처리
루프 대체
루프 대체는 의사 변수의 값이 행 설정 배열과 같은 순차적 배열 배열일 때 발생합니다.
위의 예제 코드를 사용하면 간단한 변수를 바꿀 수 있습니다. 전체 변수 블록을 반복하고 각 반복에 새 값이 포함되도록 하려면 어떻게 해야 합니까? page:: 상단에 표시된 템플릿 예를 고려해 보세요.
<html>
<head>
<title>{blog_title}</title>
</head>
<body>
<h3>{blog_heading}</h3>
{blog_entries}
<h5>{title}</h5>
<p>{body}</p>
{/blog_entries}
</body>
</html>
위 코드에서는 변수 쌍({blog_entries} data… {/blog_entries})을 볼 수 있습니다. 이와 같은 경우 이러한 쌍 사이의 전체 데이터 청크는 매개변수 배열의 “blog_entries” 요소에 있는 행 수에 따라 여러 번 반복됩니다.
변수 쌍 구문 분석은 단일 변수 구문 분석을 위해 위에 표시된 동일한 코드를 사용하여 수행됩니다. 단, 변수 쌍 데이터에 해당하는 다차원 배열을 추가한다는 점만 다릅니다. 다음 예를 고려하십시오.
<?php
$data = [
'blog_title' => 'My Blog Title',
'blog_heading' => 'My Blog Heading',
'blog_entries' => [
['title' => 'Title 1', 'body' => 'Body 1'],
['title' => 'Title 2', 'body' => 'Body 2'],
['title' => 'Title 3', 'body' => 'Body 3'],
['title' => 'Title 4', 'body' => 'Body 4'],
['title' => 'Title 5', 'body' => 'Body 5'],
],
];
return $parser->setData($data)->render('blog_template');
의사 변수 blog_entries의 값은 연관 배열의 순차적 배열입니다. 외부 레벨에는 중첩된 각 “행”과 연관된 키가 없습니다.
“쌍” 데이터가 이미 다차원 배열인 데이터베이스 결과에서 나오는 경우 간단히 데이터베이스 getResultArray() 메서드를 사용할 수 있습니다.
<?php
$query = $db->query('SELECT * FROM blog');
$data = [
'blog_title' => 'My Blog Title',
'blog_heading' => 'My Blog Heading',
'blog_entries' => $query->getResultArray(),
];
return $parser->setData($data)->render('blog_template');
루프하려는 배열에 배열 대신 개체가 포함되어 있으면 파서는 먼저 개체에서 asArray() 메서드를 찾습니다. 존재하는 경우 해당 메서드가 호출되고 결과 배열은 위에서 설명한 대로 반복됩니다. asArray() 메서드가 없으면 개체는 배열로 캐스팅되고 해당 공용 속성을 파서에서 사용할 수 있게 됩니다.
이는 모든 공용 및 보호 속성(_options 속성 제외)을 반환하고 이를 파서에서 사용할 수 있게 만드는 asArray() 메서드가 있는 Entity 클래스에 특히 유용합니다.
중첩된 대체
중첩된 대체는 의사 변수의 값이 데이터베이스의 레코드와 같은 값의 연관 배열인 경우 발생합니다.
<?php
$data = [
'blog_title' => 'My Blog Title',
'blog_heading' => 'My Blog Heading',
'blog_entries' => [
[
'title' => 'Title 1',
'body' => 'Body 1',
],
],
];
return $parser->setData($data)->render('blog_template');
의사 변수 blog_entries의 값은 연관 배열입니다. 내부에 정의된 키/값 쌍은 해당 변수에 대한 변수 쌍 루프 내부에 노출됩니다.
above::에서 작동할 수 있는 blog_template.php
<h1>{blog_title} - {blog_heading}</h1>
{blog_entries}
<div>
<h2>{title}</h2>
<p>{body}</p>
</div>
{/blog_entries}
blog_entries 범위 내에서 다른 의사 변수에 액세스하려면 cascadeData 옵션이 true로 설정되어 있는지 확인하세요.
계단식 데이터
중첩 및 루프 대체를 모두 사용하면 데이터 쌍을 내부 대체에 계단식으로 연결할 수 있는 옵션이 있습니다.
다음 예는 계단식 배열의 영향을 받지 않습니다.
<?php
$template = '{name} lives in {locations}{city} on {planet}{/locations}.';
$data = [
'name' => 'George',
'locations' => [
['city' => 'Red City', 'planet' => 'Mars'],
],
];
return $parser->setData($data)->renderString($template);
// Result: George lives in Red City on Mars.
이 예는 계단식에 따라 다른 결과를 제공합니다.
<?php
$template = '{locations}{name} lives in {city} on {planet}{/locations}.';
$data = [
'name' => 'George',
'locations' => [
['city' => 'Red City', 'planet' => 'Mars'],
],
];
return $parser->setData($data)->renderString($template, ['cascadeData' => false]);
// Result: {name} lives in Red City on Mars.
// or
return $parser->setData($data)->renderString($template, ['cascadeData' => true]);
// Result: George lives in Red City on Mars.
구문 분석 방지
{noparse} {/noparse} 태그 쌍을 사용하여 구문 분석되지 않을 페이지 부분을 지정할 수 있습니다. 이 섹션의 모든 내용은 대괄호 사이의 마크업에서 변수 대체, 반복 등이 발생하지 않고 그대로 유지됩니다.
{noparse}
<h1>Untouched Code</h1>
{/noparse}
조건부 논리
Parser 클래스는 if, else 및 elseif 구문을 처리하기 위한 몇 가지 기본 조건을 지원합니다. 모든 if 블록은 endif tag::로 닫아야 합니다.
{if $role=='admin'}
<h1>Welcome, Admin!</h1>
{endif}
이 간단한 블록은 구문 분석 중에 다음으로 변환됩니다.
<?php if ($role === 'admin'): ?>
<h1>Welcome, Admin!</h1>
<?php endif ?>
if 문 내에서 사용되는 모든 변수는 이전에 동일한 이름으로 설정되어 있어야 합니다. 그 외에는 표준 PHP 조건부와 똑같이 처리되며 모든 표준 PHP 규칙이 여기에 적용됩니다. ==, ===, !==, <, > 등과 같이 일반적으로 사용하는 비교 연산자를 사용할 수 있습니다.
{if $role=='admin'}
<h1>Welcome, Admin</h1>
{elseif $role=='moderator'}
<h1>Welcome, Moderator</h1>
{else}
<h1>Welcome, User</h1>
{endif}
경고
백그라운드에서 조건문은 eval()을 사용하여 구문 분석되므로 조건문 내에서 사용되는 사용자 데이터를 주의 깊게 다루어야 합니다. 그렇지 않으면 애플리케이션이 보안 위험에 노출될 수 있습니다.
조건부 구분 기호 변경
템플릿에 다음과 같은 JavaScript 코드가 있는 경우 conditional::으로 해석될 수 있는 문자열이 있기 때문에 구문 분석기는 구문 오류를 발생시킵니다.
<script type="text/javascript">
var f = function() {
if (hasAlert) {
alert('{message}');
}
}
</script>
이 경우 잘못된 해석을 피하기 위해 setConditionalDelimiters() 메서드를 사용하여 조건문의 구분 기호를 변경할 수 있습니다.
<?php
$parser->setConditionalDelimiters('{%', '%}');
이 경우 template::에 코드를 작성합니다.
{% if $role=='admin' %}
<h1>Welcome, Admin</h1>
{% else %}
<h1>Welcome, User</h1>
{% endif %}
데이터 이스케이프
기본적으로 페이지에 대한 XSS 공격을 방지하기 위해 모든 변수 대체가 이스케이프됩니다. CodeIgniter의 esc() 메서드는 HTML attr, css 등에 있을 때 일반 html과 같은 여러 가지 다른 컨텍스트를 지원합니다. 다른 항목이 지정되지 않으면 데이터가 HTML 컨텍스트에 있는 것으로 간주됩니다. esc() filter::를 사용하여 사용되는 컨텍스트를 지정할 수 있습니다.
{ user_styles | esc(css) }
<a href="{ user_link | esc(attr) }">{ title }</a>
탈출하지 않고 사용해야 할 것이 절대적으로 필요한 때가 있을 것입니다. braces:: 열기 및 닫기에 느낌표를 추가하면 됩니다.
{! unescaped_var !}
필터
단일 변수 대체에는 하나 이상의 필터가 적용되어 표시 방식을 수정할 수 있습니다. 이는 출력을 크게 변경하려는 것이 아니라 동일한 변수 데이터를 다른 프레젠테이션으로 재사용하는 방법을 제공합니다. 위에서 설명한 esc 필터는 한 가지 예입니다. 날짜는 또 다른 일반적인 사용 사례로, 동일한 페이지의 여러 섹션에서 동일한 데이터의 형식을 다르게 지정해야 할 수 있습니다.
필터는 의사 변수 이름 뒤에 오는 명령이며 파이프 기호 __PH_0__::로 구분됩니다.
// -55 is displayed as 55
{ value|abs }
매개변수가 인수를 취하는 경우 쉼표로 구분하고 parentheses::로 묶어야 합니다.
{ created_at|date(Y-m-d) }
여러 필터를 함께 연결하여 여러 필터를 값에 적용할 수 있습니다. 왼쪽부터 right::까지 순서대로 처리됩니다.
{ created_at|date_modify(+5 days)|date(Y-m-d) }
제공되는 필터
파서를 사용할 때 다음 필터를 사용할 수 있습니다.
필터 |
인수 |
설명 |
예 |
|---|---|---|---|
복근 |
숫자의 절대값을 표시합니다. |
{ v|abs } |
|
대문자로 쓰다 |
문자열을 문장 케이스로 표시합니다. 첫 글자는 모두 소문자이고 대문자입니다. |
{ v|capitalize} |
|
날짜 |
형식(Y-m-d) |
PHP 날짜 호환 형식 문자열입니다. |
{ v|date(Y-m-d) } |
날짜_수정 |
더하거나 뺄 값 |
|
{ v|date_modify(+1 day) } |
기본 |
기본값 |
변수가 empty()인 경우 기본값을 표시합니다. |
{ v|default(just in case) } |
에스 |
HTML, 속성, CSS, JS |
데이터를 이스케이프할 컨텍스트를 지정합니다. |
{ v|esc(attr) } |
발췌 |
문구, 반경 |
주어진 구문에서 단어 반경 내의 텍스트를 반환합니다. 발췌 도우미 기능과 동일합니다. |
{ v|excerpt(green giant, 20) } |
가장 밝은 부분 |
구절 |
‘<mark></mark>’ 태그를 사용하여 텍스트 내에서 특정 문구를 강조 표시합니다. |
{ v|highlight(view parser) } |
하이라이트_코드 |
HTML/CSS로 코드 샘플을 강조 표시합니다. |
{ v|highlight_code } |
|
한도_문자 |
한계 |
문자 수를 $limit으로 제한합니다. |
{ v|limit_chars(100) } |
한도_단어 |
한계 |
단어 수를 $limit으로 제한합니다. |
{ v|limit_words(20) } |
지역_통화 |
통화, 로케일, 분수 |
통화의 현지화된 버전을 표시합니다. “통화” 값은 3자리 ISO 4217 통화 코드입니다. |
{ v|local_currency(EUR,en_US) } |
지역_번호 |
유형, 정밀도, 로케일 |
숫자의 현지화된 버전을 표시합니다. “유형”은 소수, 통화, 백분율, 과학, 철자법, 서수, 기간 중 하나일 수 있습니다. |
{ v|local_number(decimal,2,en_US) } |
낮추다 |
문자열을 소문자로 변환합니다. |
{ v|lower } |
|
nl2br |
모든 개행 문자(n)를 HTML <br/> 태그로 바꿉니다. |
{ v|nl2br } |
|
숫자_형식 |
장소 |
파서 내에서 사용할 수 있도록 PHP number_format 함수를 래핑합니다. |
{ v|number_format(3) } |
산문 |
텍스트 본문을 가져와서 auto_typography() 메서드를 사용하여 더 보기 좋고 읽기 쉬운 산문으로 바꿉니다. |
{ v|prose } |
|
둥근 |
장소, 유형 |
숫자를 지정된 위치로 반올림합니다. 대신 ceil 및 floor 유형을 전달하여 해당 함수를 사용할 수 있습니다. |
{ v|round(3) } { v|round(ceil) } |
스트립_태그 |
허용되는 문자 |
PHP strip_tags를 래핑합니다. 허용된 태그 문자열을 허용할 수 있습니다. |
{ v|strip_tags(<br>) } |
제목 |
문자열의 “제목 케이스” 버전을 모두 소문자로 표시하고 각 단어는 대문자로 표시합니다. |
{ v|title } |
|
높은 |
문자열을 모두 대문자로 표시합니다. |
{ v|upper } |
“local_number” 필터와 관련된 자세한 내용은 PHP’s NumberFormatter을 참조하세요.
맞춤 필터
app/Config/View.php를 편집하고 $filters 배열에 새 항목을 추가하여 자신만의 필터를 쉽게 만들 수 있습니다. 각 키는 뷰에서 필터가 호출되는 이름이며 해당 값은 호출 가능한 유효한 PHP입니다.
<?php
namespace Config;
use CodeIgniter\Config\View as BaseView;
class View extends BaseView
{
public $filters = [
'foo' => '\Some\Class::methodName',
'str_repeat' => 'str_repeat', // native php function
];
// ...
}
파서 플러그인
플러그인을 사용하면 파서를 확장하여 각 프로젝트에 대한 사용자 정의 기능을 추가할 수 있습니다. PHP 호출이 가능하므로 구현이 매우 간단합니다. 템플릿 내에서 플러그인은 {+ +} tags::로 지정됩니다.
{+ foo +} inner content {+ /foo +}
이 예에서는 foo라는 플러그인을 보여줍니다. 여는 태그와 닫는 태그 사이의 모든 내용을 조작할 수 있습니다. 이 예에서는 “inner content”라는 텍스트로 작업할 수 있습니다. 플러그인은 의사 변수 교체가 발생하기 전에 처리됩니다.
플러그인은 위에 표시된 것처럼 태그 쌍으로 구성되는 경우가 많지만 닫는 tag:: 없이 단일 태그일 수도 있습니다.
{+ foo +}
여는 태그에는 플러그인 작동 방식을 사용자 정의할 수 있는 매개변수도 포함될 수 있습니다. 매개변수는 키/값 pairs::으로 표시됩니다.
{+ foo bar=2 baz="x y" +}
매개변수는 단일 values::일 수도 있습니다.
{+ include somefile.php +}
제공되는 플러그인
파서를 사용할 때 다음 플러그인을 사용할 수 있습니다.
플러그인 |
인수 |
설명 |
예 |
|---|---|---|---|
현재_url |
current_url 도우미 함수의 별칭입니다. |
|
|
이전_URL |
Previous_url 도우미 함수의 별칭입니다. |
|
|
사이트URL |
site_url 도우미 함수의 별칭입니다. |
|
|
메일토 |
이메일, 제목, 속성 |
mailto 도우미 기능의 별칭입니다. |
|
safe_mailto |
이메일, 제목, 속성 |
safe_mailto 도우미 함수의 별칭입니다. |
|
랭 |
언어 문자열 |
lang 도우미 함수의 별칭입니다. |
|
유효성 검사_오류 |
필드명(선택사항) |
필드에 대한 오류 문자열(지정된 경우) 또는 모든 유효성 검사 오류를 반환합니다. |
|
노선 |
노선명 |
Route_to 도우미 함수의 별칭입니다. |
|
csp_script_nonce |
csp_script_nonce 도우미 함수의 별칭입니다. |
|
|
csp_style_nonce |
csp_style_nonce 도우미 함수의 별칭입니다. |
|
플러그인 등록
가장 간단하게 새 플러그인을 등록하고 사용할 준비를 하기 위해 해야 할 일은 해당 플러그인을 app/Config/View.php의 $plugins 배열 아래에 추가하는 것뿐입니다. 키는 템플릿 파일 내에서 사용되는 플러그인의 이름입니다. 값은 정적 클래스 메서드를 포함하여 유효한 PHP 호출 가능입니다.
<?php
namespace Config;
use CodeIgniter\Config\View as BaseView;
class View extends BaseView
{
public $plugins = [
'foo' => '\Some\Class::methodName',
];
// ...
}
클로저를 사용할 수도 있지만 이는 구성 파일의 생성자에서만 정의할 수 있습니다.
<?php
namespace Config;
use CodeIgniter\Config\View as BaseView;
class View extends BaseView
{
public $plugins = [];
public function __construct()
{
$this->plugins['bar'] = static fn (array $params = []) => $params[0] ?? '';
parent::__construct();
}
// ...
}
호출 가능 항목이 자체적으로 존재하는 경우 열기/닫기 태그가 아닌 단일 태그로 처리됩니다. 이는 플러그인의 반환 값으로 대체됩니다.
<?php
namespace Config;
use CodeIgniter\Config\View as BaseView;
class View extends BaseView
{
public $plugins = [
'foo' => '\Some\Class::methodName',
];
// ...
}
/*
* Tag is replaced by the return value of Some\Class::methodName() static function.
* {+ foo +}
*/
콜러블이 배열로 래핑된 경우 태그 사이의 모든 콘텐츠에 대해 작동할 수 있는 열기/닫기 태그 쌍으로 처리됩니다.
<?php
namespace Config;
use CodeIgniter\Config\View as BaseView;
class View extends BaseView
{
public $plugins = [
'foo' => ['\Some\Class::methodName'],
];
// ...
}
// {+ foo +} inner content {+ /foo +}
사용법 참고 사항
템플릿에서 참조되지 않는 대체 매개변수를 포함하면 해당 매개변수는 무시됩니다.
<?php
$template = 'Hello, {firstname} {lastname}';
$data = [
'title' => 'Mr',
'firstname' => 'John',
'lastname' => 'Doe',
];
return $parser->setData($data)->renderString($template);
// Result: Hello, John Doe
템플릿에서 참조되는 대체 매개변수를 포함하지 않으면 원래 의사 변수가 결과에 표시됩니다.
<?php
$template = 'Hello, {firstname} {initials} {lastname}';
$data = [
'title' => 'Mr',
'firstname' => 'John',
'lastname' => 'Doe',
];
return $parser->setData($data)->renderString($template);
// Result: Hello, John {initials} Doe
배열이 예상될 때(예: 변수 쌍의 경우) 문자열 대체 매개변수를 제공하는 경우 여는 변수 쌍 태그에 대한 대체가 수행되지만 닫는 변수 쌍 태그는 제대로 렌더링되지 않습니다.
<?php
$template = 'Hello, {firstname} {lastname} ({degrees}{degree} {/degrees})';
$data = [
'degrees' => 'Mr',
'firstname' => 'John',
'lastname' => 'Doe',
'titles' => [
['degree' => 'BSc'],
['degree' => 'PhD'],
],
];
return $parser->setData($data)->renderString($template);
// Result: Hello, John Doe (Mr{degree} {/degrees})
조각 보기
뷰에서 반복 효과를 얻기 위해 변수 쌍을 사용할 필요는 없습니다. 변수 쌍 내부에 있는 항목에 대해 뷰 조각을 사용하고 뷰 대신 컨트롤러에서 반복을 제어하는 것이 가능합니다.
view::에서 반복이 제어되는 예
$template = '<ul>{menuitems}
<li><a href="{link}">{title}</a></li>
{/menuitems}</ul>';
$data = [
'menuitems' => [
['title' => 'First Link', 'link' => '/first'],
['title' => 'Second Link', 'link' => '/second'],
]
];
return $parser->setData($data)->renderString($template);
Result:
<ul>
<li><a href="/first">First Link</a></li>
<li><a href="/second">Second Link</a></li>
</ul>
뷰 프래그먼트를 사용하여 컨트롤러에서 반복을 제어하는 예:
<?php
$temp = '';
$template1 = '<li><a href="{link}">{title}</a></li>';
$data1 = [
['title' => 'First Link', 'link' => '/first'],
['title' => 'Second Link', 'link' => '/second'],
];
foreach ($data1 as $menuItem) {
$temp .= $parser->setData($menuItem)->renderString($template1);
}
$template2 = '<ul>{menuitems}</ul>';
$data = [
'menuitems' => $temp,
];
return $parser->setData($data)->renderString($template2);
Result:
<ul>
<li><a href="/first">First Link</a></li>
<li><a href="/second">Second Link</a></li>
</ul>
수업 참고자료
- class CodeIgniter\View\Parser
- render($view[, $options[, $saveData]])
- 매개변수:
$view (
string) – 뷰 소스의 파일 이름$options (
array) – 키/값 쌍으로 구성된 옵션 배열$saveData (
boolean) – true인 경우 다른 호출에 사용할 데이터를 저장하고, false인 경우 뷰를 렌더링한 후 데이터를 정리합니다.
- 반환:
선택한 뷰에 대해 렌더링된 텍스트
- 반환 형식:
string
파일 이름과 이미 설정된 데이터를 기반으로 출력을 작성합니다.
<?php return $parser->render('myview');
지원되는 옵션:
cache- 보기 결과를 저장하는 시간(초)cache_name- 캐시된 보기 결과를 저장/검색하는 데 사용되는 ID입니다. 기본값은 뷰 경로입니다.cascadeData- 중첩 또는 루프 대체가 발생할 때 적용되는 데이터 쌍을 전파해야 하는 경우 truesaveData- 후속 호출을 위해 뷰 데이터 매개변수를 유지해야 하는 경우 true
조건부 대체가 먼저 수행된 다음 각 데이터 쌍에 대해 나머지 대체가 수행됩니다.
- renderString($template[, $options[, $saveData]])
- 매개변수:
$template (
string) – 문자열로 제공되는 소스 보기$options (
array) – 키/값 쌍으로 구성된 옵션 배열$saveData (
boolean) – true인 경우 다른 호출에 사용할 데이터를 저장하고, false인 경우 뷰를 렌더링한 후 데이터를 정리합니다.
- 반환:
선택한 뷰에 대해 렌더링된 텍스트
- 반환 형식:
string
제공된 템플릿 소스와 이미 설정된 데이터를 기반으로 출력을 작성합니다.
<?php return $parser->renderString('<ul><li>Item 1</li><li>Item 2</li></ul>');
지원되는 옵션 및 동작은 위와 같습니다.
- setData([$data[, $context = null]])
- 매개변수:
$data (
array) – 키/값 쌍으로 된 뷰 데이터 문자열 배열$context (
string) – 데이터 이스케이프에 사용할 컨텍스트입니다.
- 반환:
메소드 체이닝을 위한 렌더러
- 반환 형식:
CodeIgniter\View\RendererInterface.
여러 뷰 데이터를 한 번에 설정합니다.
<?php $parser->setData(['name' => 'George', 'position' => 'Boss']);
지원되는 이스케이프 컨텍스트: html, css, js, url, attr 또는 raw. ‘raw’인 경우 이스케이프가 발생하지 않습니다.
- setVar($name[, $value = null[, $context = null]])
- 매개변수:
$name (
string) – 뷰 데이터 변수의 이름$value (
mixed) – 이 뷰 데이터의 가치$context (
string) – 데이터 이스케이프에 사용할 컨텍스트입니다.
- 반환:
메소드 체이닝을 위한 렌더러
- 반환 형식:
CodeIgniter\View\RendererInterface.
단일 뷰 데이터를 설정합니다.
<?php $parser->setVar('name', 'Joe', 'html');
지원되는 이스케이프 컨텍스트: html, css, js, url, attr 또는 raw. ‘raw’인 경우 이스케이프가 발생하지 않습니다.
- setDelimiters($leftDelimiter = '{', $rightDelimiter = '}')
- 매개변수:
$leftDelimiter (
string) – 대체 필드의 왼쪽 구분 기호$rightDelimiter (
string) – 대체 필드의 오른쪽 구분 기호
- 반환:
메소드 체이닝을 위한 렌더러
- 반환 형식:
CodeIgniter\View\RendererInterface.
대체 필드 구분 기호를 재정의합니다.
<?php $parser->setDelimiters('[', ']');
- setConditionalDelimiters($leftDelimiter = '{', $rightDelimiter = '}')
- 매개변수:
$leftDelimiter (
string) – 조건문의 왼쪽 구분 기호$rightDelimiter (
string) – 조건문의 오른쪽 구분 기호
- 반환:
메소드 체이닝을 위한 렌더러
- 반환 형식:
CodeIgniter\View\RendererInterface.
조건부 구분 기호를 재정의합니다.
<?php $parser->setConditionalDelimiters('{%', '%}');
댓글
주석을
{# #}기호로 묶어 구문 분석 중에 무시되고 제거될 주석을 템플릿에 배치할 수 있습니다.