백엔드 개발 PHP 튜토리얼 PHP Yii Framework_php 팁에서 뷰를 생성하고 뷰를 렌더링하는 방법에 대한 자세한 설명

PHP Yii Framework_php 팁에서 뷰를 생성하고 뷰를 렌더링하는 방법에 대한 자세한 설명

May 16, 2016 pm 07:55 PM
php view yii 표현 보다

뷰는 MVC 패턴의 일부입니다. 최종 사용자에게 데이터를 표시하는 코드입니다. 웹 애플리케이션에서는 뷰 템플릿을 기반으로 뷰가 생성됩니다. 뷰 템플릿은 주로 HTML 코드와 표시 PHP 코드를 포함하는 PHP 스크립트 파일입니다. , 뷰 구성 및 렌더링에 도움이 되는 일반 메소드를 주로 제공합니다. 단순화를 위해 뷰 템플릿 또는 뷰 템플릿 파일을 뷰라고 부릅니다.

뷰 만들기

앞서 언급했듯이 뷰는 HTML과 PHP 코드가 포함된 PHP 스크립트입니다. 다음 코드는 로그인 폼의 뷰입니다. PHP 코드가 페이지 제목, 양식 등의 동적 콘텐츠를 생성하는 데 사용되는 것을 볼 수 있습니다. HTML 코드는 이를 아름다운 HTML 페이지로 구성합니다.

<&#63;php
use yii\helpers\Html;
use yii\widgets\ActiveForm;

/* @var $this yii\web\View */
/* @var $form yii\widgets\ActiveForm */
/* @var $model app\models\LoginForm */

$this->title = 'Login';
&#63;>
<h1><&#63;= Html::encode($this->title) &#63;></h1>

<p>Please fill out the following fields to login:</p>

<&#63;php $form = ActiveForm::begin(); &#63;>
  <&#63;= $form->field($model, 'username') &#63;>
  <&#63;= $form->field($model, 'password')->passwordInput() &#63;>
  <&#63;= Html::submitButton('Login') &#63;>
<&#63;php ActiveForm::end(); &#63;>

로그인 후 복사

뷰에서 $this에 액세스하여 yiiwebView를 가리켜 이 뷰 파일을 관리하고 렌더링할 수 있습니다.

$this 외에도 위 예제의 뷰에는 $model과 같은 사전 정의된 다른 변수가 있습니다. 이러한 변수는 컨트롤러 또는 뷰 렌더링을 트리거하는 다른 개체에서 뷰로 전달된 데이터를 나타냅니다.

팁: IDE 편집기에서 인식할 수 있도록 뷰 파일의 헤더 주석에 미리 정의된 변수를 나열하는 것도 뷰 문서를 생성하는 좋은 방법입니다.
안전

HTML 페이지를 생성하는 뷰를 생성할 때 사용자 입력 데이터를 표시하기 전에 트랜스코딩하고 필터링하는 것이 중요합니다. 그렇지 않으면 애플리케이션이 크로스 사이트 스크립팅 공격에 취약할 수 있습니다.

일반 텍스트를 표시하려면 먼저 트랜스코딩을 위해 yiihelpersHtml::encode()를 호출하세요. 예를 들어 다음 코드는 사용자 이름을 표시하기 전에 트랜스코딩합니다.

<&#63;php
use yii\helpers\Html;
&#63;>

<div class="username">
  <&#63;= Html::encode($user->name) &#63;>
</div>

로그인 후 복사

HTML 콘텐츠를 표시하려면 먼저 yiihelpersHtmlPurifier를 호출하여 콘텐츠를 필터링합니다. 예를 들어 다음 코드는 제출된 콘텐츠를 표시하기 전에 필터링합니다.

<&#63;php
use yii\helpers\HtmlPurifier;
&#63;>

<div class="post">
  <&#63;= HtmlPurifier::process($post->text) &#63;>
</div>

로그인 후 복사

팁: HTMLPurifier는 출력 데이터의 보안을 보장하는 데는 효과적이지만 성능은 좋지 않습니다. 애플리케이션에 고성능이 필요한 경우 필터링된 결과를 캐싱하는 것이 좋습니다.

조직보기

컨트롤러 및 모델과 유사하게 뷰 구성에 대한 몇 가지 규칙이 있습니다.

컨트롤러가 렌더링한 뷰 파일은 기본적으로 @app/views/ControllerID 디렉터리에 배치됩니다. 여기서 ControllerID는 컨트롤러 ID에 해당합니다. 예를 들어 컨트롤러 클래스는 PostController이고 뷰 파일 디렉터리는 @app이어야 합니다. /views/post 및 컨트롤러 클래스 PostCommentController에 해당하는 디렉터리는 @app/views/post-comment입니다. 모듈의 컨트롤러인 경우 해당 디렉터리는 yiibaseModule::basePath 모듈 디렉터리 아래의 views/ControllerID 디렉터리여야 합니다. ;
위젯에 의해 렌더링된 보기 파일은 기본적으로 WidgetPath/views 디렉터리에 배치됩니다. 여기서 WidgetPath는 위젯 클래스 파일이 있는 디렉터리를 나타냅니다.
다른 객체에 의해 렌더링된 보기 파일의 경우 위젯과 유사한 규칙을 따르는 것이 좋습니다.
컨트롤러나 위젯의 yiibaseViewContextInterface::getViewPath() 메서드를 재정의하여 보기 파일의 기본 디렉터리를 사용자 지정할 수 있습니다.

렌더 뷰

렌더 뷰 메서드는 컨트롤러, 위젯 또는 다른 곳에서 호출하여 뷰를 렌더링할 수 있습니다.

/**
 * @param string $view 视图名或文件路径,由实际的渲染方法决定
 * @param array $params 传递给视图的数据
 * @return string 渲染结果
 */
methodName($view, $params = [])
로그인 후 복사

컨트롤러에서 렌더링

컨트롤러에서는 다음 컨트롤러 메서드를 호출하여 뷰를 렌더링할 수 있습니다.

  • yiibaseController::render(): 뷰 이름을 렌더링하고 레이아웃을 사용하여 렌더링 결과를 반환합니다.
  • yiibaseController::renderPartial(): 뷰 이름을 렌더링하고 레이아웃을 사용하지 않습니다.
  • yiiwebController::renderAjax(): 레이아웃을 사용하지 않고 뷰 이름을 렌더링하고 일반적으로 AJAX 웹 페이지 요청에 대한 응답으로 사용되는 등록된 모든 JS/CSS 스크립트 및 파일을 삽입합니다.
  • yiibaseController::renderFile(): 뷰 파일 디렉터리 또는 별칭에서 뷰 파일을 렌더링합니다.

예:

namespace app\controllers;

use Yii;
use app\models\Post;
use yii\web\Controller;
use yii\web\NotFoundHttpException;

class PostController extends Controller
{
  public function actionView($id)
  {
    $model = Post::findOne($id);
    if ($model === null) {
      throw new NotFoundHttpException;
    }

    // 渲染一个名称为"view"的视图并使用布局
    return $this->render('view', [
      'model' => $model,
    ]);
  }
}

로그인 후 복사

소품
위젯은 CWidget 또는 그 하위 클래스의 인스턴스입니다. 위젯은 일반적으로 뷰에 포함되어 복잡하고 독립적인 사용자 인터페이스를 사용할 수 있습니다. 복잡한 달력 인터페이스를 렌더링하려면 작은 개체를 사용하여 사용자 인터페이스를 더 쉽게 재사용할 수 있습니다.

다음 보기 스크립트에 따라 위젯을 사용할 수 있습니다.

<&#63;php $this->beginWidget('path.to.WidgetClass'); &#63;>
...可能会由小物件获取的内容主体...
<&#63;php $this->endWidget(); &#63;>
로그인 후 복사

또는

<&#63;php $this->widget('path.to.WidgetClass'); &#63;>
로그인 후 복사

후자는 본문 내용이 필요하지 않은 구성 요소에 사용됩니다.

위젯은 성능을 사용자 정의하도록 구성할 수 있습니다. 이는 CBaseController::beginWidget 또는 CBaseController::widget을 호출하여 초기화 속성 값을 설정함으로써 수행됩니다. 예를 들어 CMaskedTextField 위젯을 사용할 때 이를 지정하려고 합니다. 사용된 마스크(번역자의 설명에 따르면 출력 형식으로 이해될 수 있음) 여기서 배열의 핵심은 속성의 이름과 값입니다. 배열의 해당 값은 아래와 같습니다.

<&#63;php
$this->widget('CMaskedTextField',array(
  'mask'=>'99/99/9999'
));
&#63;>
로그인 후 복사

CWidget을 상속하고 init() 및 run() 메서드를 재정의하여 새 위젯을 정의합니다.

class MyWidget extends CWidget
{
  public function init()
  {
    // 此方法会被 CController::beginWidget() 调用
  }
 
  public function run()
  {
    // 此方法会被 CController::endWidget() 调用
  }
}
로그인 후 복사

小物件可以像一个控制器一样拥有它自己的视图.默认情况下,小物件的视图文件位于包含了小物件类文件目录的 views 子目录之下.这些视图可以通过调用 CWidget::render() 渲染,这一点和控制器很相似.唯一不同的是,小物件的视图没有布局文件支持。另外,小物件视图中的$this指向小物件实例而不是控制器实例。

视图中渲染

可以在视图中渲染另一个视图,可以调用yii\base\View视图组件提供的以下方法:

  • yii\base\View::render(): 渲染一个 视图名.
  • yii\web\View::renderAjax(): 渲染一个 视图名 并注入所有注册的JS/CSS脚本和文件,通常使用在响应AJAX网页请求的情况下。
  • yii\base\View::renderFile(): 渲染一个视图文件目录或别名下的视图文件。

例如,视图中的如下代码会渲染该视图所在目录下的 _overview.php 视图文件, 记住视图中 $this 对应 yii\base\View 组件:

<&#63;= $this->render('_overview') &#63;>
로그인 후 복사

其他地方渲染

在任何地方都可以通过表达式 Yii::$app->view 访问 yii\base\View 应用组件, 调用它的如前所述的方法渲染视图,例如:

// 显示视图文件 "@app/views/site/license.php"
echo \Yii::$app->view->renderFile('@app/views/site/license.php');
로그인 후 복사

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

CakePHP 프로젝트 구성 CakePHP 프로젝트 구성 Sep 10, 2024 pm 05:25 PM

이번 장에서는 CakePHP의 환경 변수, 일반 구성, 데이터베이스 구성, 이메일 구성에 대해 알아봅니다.

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Dec 24, 2024 pm 04:42 PM

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP 날짜 및 시간 CakePHP 날짜 및 시간 Sep 10, 2024 pm 05:27 PM

cakephp4에서 날짜와 시간을 다루기 위해 사용 가능한 FrozenTime 클래스를 활용하겠습니다.

CakePHP 파일 업로드 CakePHP 파일 업로드 Sep 10, 2024 pm 05:27 PM

파일 업로드 작업을 위해 양식 도우미를 사용할 것입니다. 다음은 파일 업로드의 예입니다.

CakePHP 라우팅 CakePHP 라우팅 Sep 10, 2024 pm 05:25 PM

이번 장에서는 라우팅과 관련된 다음과 같은 주제를 학습하겠습니다.

CakePHP 토론 CakePHP 토론 Sep 10, 2024 pm 05:28 PM

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 Dec 20, 2024 am 11:31 AM

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는

CakePHP 유효성 검사기 만들기 CakePHP 유효성 검사기 만들기 Sep 10, 2024 pm 05:26 PM

컨트롤러에 다음 두 줄을 추가하면 유효성 검사기를 만들 수 있습니다.

See all articles