2009-11-12 4 views
8

저는 CakePHP 1.2를 사용하고 있습니다. 컨트롤러에서 View로 $ this-> data 전달시 부작용이 있는지 궁금합니다.

예 :

// inside PostsController, I have this code: 
$this->data['Posts'] = $this->Post->find('all'); 

대신 :

$posts = $this->Post->find('all'); 
$this->set(compact('posts')); 

// inside the /posts/view, I access it like this: 
<?php foreach ($this->data['Posts'] as $post) {....};?> 

이렇게함으로써, 내가 모두 함께 컨트롤러()는 $ this-> 설정 스킵. 이 모든 MVC 패턴이나 내가 간과 할 수있는 보안 문제를 위반합니까? Auth Component를 사용하면 $ this-> data에 [_Token] 배열이 들어있는 것을 보았습니다.

감사

답변

14

Cake Helpers가 자동으로 데이터를 찾는 다른 장소에 대해 알고 있어야합니다. 실제적인 차이가 있기 때문입니다. 양식 도우미는 $this->data의 내용을 기반으로 필드를 자동으로 채 웁니다. 유효성 검사가 실패 할 때 양식 데이터가 유지되는 방식입니다. OTOH, <select> 요소 options 배열은 복수형 필드 이름
에서 자동으로 가져옵니다. $form->select('Model.foo_id')은 설정 한 경우 $foos에서 옵션을 사용합니다.

이와 같이 $this->data은 특별한 위치를 가지며 명명 된 변수가 사용하는 것처럼 가볍게 사용하면 안되며 무시해서는 안됩니다. 두 가지 모두 적절하게 사용하십시오. 양식 도우미 내용을 자동으로 설정하지 않으려면 set() 변수를 사용하십시오. IMHO 포함 된 데이터를 암시하는 변수 이름을 지정하는 것이 더 읽기 쉽습니다. $this->data에서 작업하는 모든보기는 $foo에서 작동하는보기와 덜 $bar에서보기보다 덜 선명합니다.

3

$controller->data는 뷰 파일에서 컨트롤에 게시 된 데이터에 대한 의미한다.

$view->data은 일반 데이터입니다.

저는 제 자신을 제정신으로 지키려고하지 않을 것입니다. 게다가 당신은 더 많은 것을 타이핑하고있다.

+1

내가 펑키 야에 동의 - $ this-> 데이터, $는이 모델, 컨트롤러, 뷰 또는 다른 개체, 난 DB에 기록에서 양식에서 게시 또는 읽기 데이터를해야한다고 생각 . 귀하의 버전은 읽기 쉽지 않으며 다른 사람들이 익숙한 컨벤션에 반하는 것으로 생각됩니다. 그러나 실제로 회선을 저장하려는 경우 $ this-> set ('posts', $ this-> Post-> find ('all'))); – neilcrookes

2

양식 작업을 할 때를 제외하고는 $ this-> data를 직접 설정할 이유가 없습니다.

왜 깨지는 관습 - 컨트롤러 : 이유가 있습니다. 데이터를 뷰에 전달하여 로직 목적으로 표시하려면 컨트롤러 : 데이터를 의도하지 않은 목적으로 사용하는 대신 제공되는 기능을 사용해야합니다.

규칙을 준수하고 예상대로 올바른 방법으로 CakePHP를 사용하면 모든 것이 더 쉬워집니다. 당신이

2

는 오류가 발생합니다 :

Indirect modification of overloaded property View::$data has no effect

7

CakePHP를 당신이 대신 일반 $this->data 경우 $this->request->data를 사용해야합니다2.X 그렇지 않으면이 오류가 끝낼 수 있습니다 $this->data에 데이터를 설정하려고 할 때 cakephp 버전 2 *에서

관련 문제