2017-02-03 3 views
0

태그에 대한 ID 배열을 사용하고 태그가 이미 사용되지 않았는지 확인하기 위해 일부 처리를 수행하는 ajax 메서드가 있습니다. 그런 다음 자바 스크립트로 태그를 렌더링 할 수 있도록 클라이언트에 HTML을 다시 보내야합니다. 에 의해 생성 된 응답의 몸이 '렌더링'요소의 HTML을 포함로 한 태그는, 컨트롤러에서Ajax 메서드는 여러 요소를 렌더링합니다.

$this->render('/Element/tag'); 

를 호출하는 매우 사소한. 내 태그 배열을 각 요소로 변환하고 응답에 클라이언트로 다시 보내려면 어떻게해야합니까?

+0

[다른 질문에 대한 답변] (http://stackoverflow.com/a/16092328/7100404)에 따르면이 HTML을 다시 보내면 안되며 데이터를 보내고 javascript로 요소를 빌드해야합니다. 그렇다면 엘리먼트 템플릿을 가지고 주변에 무슨 소용이 있습니까? 이 유스 케이스에서는 템플릿을 어떻게 활용할 수 있습니까? – pjenk213

+0

나는 그 감정에 일반적으로 동의하지 않을 것이다. CakePHP를 통해 결코 HTML을 렌더링하지 않는 것 (자바 스크립트에서 전체 응용 프로그램을 빌드하고 말 그대로 JSON으로 모든 것을 보내지 않는 이유는 무엇입니까?). 그것은 일을하는 타당한 방법이지만 다른 방법입니다. CakePHP는 또한 동일한 엔드 포인트가 때때로 HTML과 JSON 데이터를 제공 할 수 있도록 [view routing] (https://book.cakephp.org/3.0/en/development/routing.html#routing-file-extensions)을 사용할 수 있습니다. 다른 시간. – ahoffner

답변

0

render은 한 번만 호출 할 수 있습니다. 컨트롤러 코드의 끝에 사용할 "보기"를 단순히 나타내는 것으로 생각하면됩니다.

여러 태그를 렌더링하는보기가 필요한 경우 새보기를 정의하면됩니다 (예 : /src/Template/Tags/tags.ctp).

당신은 태그의 배열을 포함하여보기합니다 (Tags/tags.ctp 파일) 당신이 원하는 무엇이든을 전달할 수는 tags.ctp 내부 그리고

$tags = ['Tag 1', 'Tag 2']; 

$this->set('tags', $tags); 

$this->render('Tags/tags'); 

렌더링하는 태그 요소를 사용하는 각 하나

<?php foreach ($tags as $tag) { 
    echo $this->element('tags', [ 
     "tag" => $tag 
    ]); 
} 
+0

이것은 [이 답변] (http://stackoverflow.com/a/4405533/7100404)과 동일하며 작동 할 수도 있지만별로 드라이하지는 않습니다. DRYer 솔루션이 있습니까? – pjenk213

+0

Elements의 전체적인 요점은 Views에 삽입 할 수있는 재사용 가능한 HTML의 짧은 비트를 정의하는 것입니다.이 코드는 여러 뷰에서 액세스 할 수있는 코드 비트를 반복적으로 유지하는 도구입니다. 매우 DRY 원리입니다. 당신이 피하고 싶은 "반복되는"부분은 무엇입니까? – ahoffner

+0

이제 단일 태그를 렌더링하는 요소와 여러 태그를 렌더링하는 요소가 생겼습니다. 여러 태그에 대해 render()와 같은 종류의 데이터를 보내고 하나의 'tag'요소 만 사용하고 싶습니다. – pjenk213

관련 문제