렌더러 보기
뷰 렌더러 사용
view() 함수는 renderer 서비스의 인스턴스를 가져와 데이터를 설정하고 뷰를 렌더링하는 편의 함수입니다. 이것이 바로 여러분이 원하는 것일 때가 많지만, 좀 더 직접적으로 작업하고 싶은 경우가 있을 수도 있습니다. 이 경우 View 서비스에 직접 액세스할 수 있습니다.
$view = service('renderer');
또는 View 클래스를 기본 렌더러로 사용하지 않는 경우 직접 인스턴스화할 수 있습니다.
$view = new \CodeIgniter\View\View();
중요
컨트롤러 내에서만 서비스를 생성해야 합니다. 라이브러리에서 View 클래스에 액세스해야 하는 경우 이를 라이브러리 생성자에서 종속성으로 설정해야 합니다.
그런 다음 제공되는 세 가지 표준 방법인 render(), setVar() 및 setData() 중 하나를 사용할 수 있습니다.
그것이 하는 일
View 클래스는 보기 매개변수를 스크립트 내에서 액세스할 수 있는 PHP 변수로 추출한 후 애플리케이션의 보기 경로에 저장된 기존 HTML/PHP 스크립트를 처리합니다. 이는 뷰 매개변수 이름이 합법적인 PHP 변수 이름이어야 함을 의미합니다.
View 클래스는 내부적으로 연관 배열을 사용하여 render()을 호출할 때까지 뷰 매개변수를 축적합니다. 이는 매개변수(또는 변수) 이름이 고유해야 함을 의미합니다. 그렇지 않으면 이후 변수 설정이 이전 변수 설정을 재정의합니다.
이는 스크립트 내부의 다양한 컨텍스트에 대한 이스케이프 매개변수 값에도 영향을 미칩니다. 이스케이프된 각 값에 고유한 매개변수 이름을 지정해야 합니다.
값이 배열인 매개변수에는 특별한 의미가 부여되지 않습니다. PHP 코드에서 배열을 적절하게 처리하는 것은 사용자의 몫입니다.
뷰 매개변수 설정
setVar() 메소드는 뷰 매개변수를 설정합니다.
$view->setVar('name', 'Joe', 'html');
setData() 메소드는 여러 뷰 매개변수를 한 번에 설정합니다.
$view->setData(['name' => 'George', 'position' => 'Boss']);
메소드 체이닝
setVar() 및 setData() 메서드는 연결 가능하므로 여러 가지 호출을 체인으로 결합할 수 있습니다.
$view->setVar('one', $one)
->setVar('two', $two)
->render('myView');
데이터 이스케이프
setVar() 및 setData() 함수에 데이터를 전달할 때 크로스 사이트 스크립팅 공격으로부터 보호하기 위해 데이터를 이스케이프할 수 있는 옵션이 있습니다. 두 방법 중 하나의 마지막 매개변수로 원하는 컨텍스트를 전달하여 데이터를 이스케이프할 수 있습니다. 컨텍스트 설명은 아래를 참조하세요.
데이터가 이스케이프되는 것을 원하지 않으면 null 또는 'raw'을 각 함수의 최종 매개변수로 전달할 수 있습니다.
$view->setVar('one', $one, 'raw');
데이터를 이스케이프하지 않기로 선택하거나 객체 인스턴스를 전달하는 경우 esc() 함수를 사용하여 뷰 내에서 데이터를 수동으로 이스케이프할 수 있습니다. 첫 번째 매개변수는 이스케이프할 문자열입니다. 두 번째 매개변수는 데이터를 이스케이프하기 위한 컨텍스트입니다(아래 참조).
<?= esc($object->getStat()) ?>
이스케이프 컨텍스트
기본적으로 esc(), setVar() 및 setData() 함수는 이스케이프하려는 데이터가 표준 HTML 내에서 사용되도록 의도된 것이라고 가정합니다. 그러나 데이터가 Javascript, CSS 또는 href 속성에서 사용되는 경우에는 다른 이스케이프 규칙을 적용해야 합니다. 두 번째 매개변수로 컨텍스트 이름을 전달할 수 있습니다. 유효한 컨텍스트는 'html', 'js', 'css', 'url' 및 __PH_7__::입니다.
<a href="<?= esc($url, 'url') ?>" data-foo="<?= esc($bar, 'attr') ?>">Some Link</a>
<script>
var siteName = '<?= esc($siteName, 'js') ?>';
</script>
<style>
body {
background-color: <?= esc('bgColor', 'css') ?>
}
</style>
렌더러 옵션 보기
여러 옵션을 render() 또는 renderString() 메서드에 전달할 수 있습니다.
$optionscache- 보기 결과를 저장하는 시간(초)입니다.renderString()에 대해서는 무시됩니다.cache_name- 캐시된 보기 결과를 저장/검색하는 데 사용되는 ID입니다. 기본값은$viewPath입니다.renderString()에 대해서는 무시됩니다.debug- Debug Toolbar에 대한 디버그 코드 추가를 비활성화하려면 false로 설정할 수 있습니다.
$saveData- 후속 호출을 위해 뷰 데이터 매개변수를 유지해야 하는 경우 true입니다.
참고
인터페이스에 의해 정의된 $saveData은 부울이어야 하지만 클래스 구현(아래 View과 같은)은 이를 확장하여 null 값을 포함할 수 있습니다.
수업 참고자료
- class CodeIgniter\View\View
- render($view[, $options[, $saveData = false]])
- 매개변수:
$view (
string) – 뷰 소스의 파일 이름$options (
array) – 키/값 쌍으로 구성된 옵션 배열$saveData (
boolean|null) – true인 경우 다른 호출에 사용할 수 있도록 데이터를 저장합니다. false인 경우 뷰를 렌더링한 후 데이터를 정리합니다. null인 경우 구성 설정을 사용합니다.
- 반환:
선택한 뷰에 대해 렌더링된 텍스트
- 반환 형식:
string
파일 이름과 이미 설정된 데이터를 기반으로 출력을 작성합니다.
echo $view->render('myview');
- renderString($view[, $options[, $saveData = false]])
- 매개변수:
$view (
string) – 렌더링할 뷰의 콘텐츠(예: 데이터베이스에서 검색된 콘텐츠)$options (
array) – 키/값 쌍으로 구성된 옵션 배열$saveData (
boolean|null) – true인 경우 다른 호출에 사용할 수 있도록 데이터를 저장합니다. false인 경우 뷰를 렌더링한 후 데이터를 정리합니다. null인 경우 구성 설정을 사용합니다.
- 반환:
선택한 뷰에 대해 렌더링된 텍스트
- 반환 형식:
string
뷰 조각과 이미 설정된 데이터를 기반으로 출력을 빌드합니다.
echo $view->renderString('<div>My Sharona</div>');
경고
이는 데이터베이스에 저장되었을 수 있는 콘텐츠를 표시하는 데 사용될 수 있지만 이것이 잠재적인 보안 취약성이라는 점과 그러한 데이터를 반드시 검증하고 적절하게 이스케이프 처리해야 한다는 점을 인식해야 합니다!
- setData([$data[, $context = null]])
- 매개변수:
$data (
array) – 키/값 쌍으로 된 뷰 데이터 문자열 배열$context (
string) – 데이터 이스케이프에 사용할 컨텍스트입니다.
- 반환:
메소드 체이닝을 위한 렌더러
- 반환 형식:
CodeIgniter\View\RendererInterface.
여러 뷰 데이터를 한 번에 설정합니다.
$view->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.
단일 뷰 데이터를 설정합니다.
$view->setVar('name', 'Joe', 'html');
지원되는 이스케이프 컨텍스트:
html,css,js,url,attr또는raw.'raw'인 경우 탈출이 발생하지 않습니다.이전에 이 개체에 사용한 뷰 데이터 변수를 사용하는 경우 새 값이 기존 값을 대체합니다.