2011-07-27 1 views
0

의 재산 나는 YII 세대의 의견이 제출 될 때이 코드를 찾을 수 :PHP -되지 선언 객체

<?php 
    $this->breadcrumbs=array(
     'Deal'=>array('deal/index'), 
     'Create', 
    );?> 
    <h1><?php echo $this->id . '/' . $this->action->id; ?></h1> 

    <p>You may change the content of this page by modifying the file <tt><?php echo __FILE__; ?></tt>.</p> 

내가 $ 알이 실제로 객체하지만 난 어떤로는 표시되지 않습니다 또는 개체 선언, 어떻게 올 우리는이 $ this-> id를 가졌습니까?

저는 PHP에 매우 익숙하며 또한 배우기도 매우 기쁩니다. :) 먼저 고마워.

+0

템플릿에서'$ this'를 사용하지 않는 좋은 이유가있다. – erisco

+0

Yii 튜토리얼 인 http : //www.yiiframework를 통해 작업 할 수도 있습니다.co.kr/tutorials/프레임 워크 및 프레임 워크에 대한 느낌을 아직받지 못한 경우 – ldg

답변

1

YII이 (CBaseController에서) 다음보기 렌더러를 사용

public function renderInternal($_viewFile_,$_data_=null,$_return_=false) 
    { 
     // we use special variable names here to avoid conflict when extracting data 
     if(is_array($_data_)) 
      extract($_data_,EXTR_PREFIX_SAME,'data'); 
     else 
      $data=$_data_; 
     if($_return_) 
     { 
      ob_start(); 
      ob_implicit_flush(false); 
      require($_viewFile_); 
      return ob_get_clean(); 
     } 
     else 
      require($_viewFile_); 
    } 

당신이 당신의 뷰 컨트롤러의 컨텍스트 내에서 호출 때문에 $이 (컨트롤러)에 액세스 할 수 있습니다 볼 수 있듯이

. 컨트롤러를 사용하여 데이터보기를 전달하는 것은 좋지 않지만 뷰를 통해 데이터를 파싱하고 다른 기능 (예 : 위젯)을 액세스하는 데 유용합니다.

코드 예제에서 컨트롤러의 속성 이동 경로는보기로 수정하고보기가 레이아웃 안에 있더라도 레이아웃으로 읽을 수 있습니다. 이는 뷰가 렌더링 된 다음 레이아웃에 삽입되기 때문에 작동합니다. 또한 이것을 사용하는 것이 컨트롤러에서 레이아웃으로 데이터를 전달할 수있는 유일한 방법이기도합니다.

yii의 설명서는 훌륭하지만 소스를 열고 작동 방식을 살펴 보는 것보다 낫습니다. 결국, 그것은 오픈 소스의 요점이다 : D

0

코드가 함수 내부 (객체 내부)에 포함되어 있으면 해당 객체의 범위에 있음을 의미합니다.

PHP에 포함 시키면 모든 변수가 "includer"안에 들어갑니다. $ this는 유효한 변수입니다.

0

이 파일이 포함되어 있거나 클래스 메서드에있는 것이 가능합니다. 그것이 포함되어 있다면 메서드가 정적이 아니라면 $ this를 사용할 수 있습니다.

0

$this->id은 (존재하지 않는 한) 코드에 실제로 존재하지 않습니다.

0

디버깅/이해 목적을 위해 당신은 객체로 뷰를로드하는

var_dump($this) 

또는

print_r($this) 
1

여러 번 프레임 워크를 호출 한 다음 렌더링 할 수있다. 이것은 그 시대의 하나입니다. 이 경우, CViewRenderer의 작동 방식과 renderInternal의 작동 방식에 따라 CBaseController 인스턴스가되고 현재 CController 인스턴스가 (더 많지 않을 수도 있음)됩니다.

0

Yii와 사용자가 제시 한 컨텍스트 (보기 파일)에서 "$ this"는 Controller 개체를 나타냅니다. "id"는 컨트롤러의 이름이므로 SiteController에서 렌더링 한 뷰 파일 인 경우 "$ this-> id"는 = "site"입니다. 당연한 것은 아니지만 "$ this-> action-> id"= 작업 이름입니다.

어떤 종류의 오류가 발생하거나 그 오류의 원인을 궁금하게 생각하십니까? 앞서 언급했듯이 print_r($this)으로 개체의 내용을 인쇄 할 수 있습니다.