CRUD를 처리 할 때 양식 객체에서보기를 생성하는 쉬운 방법이 있는지 궁금합니다.Zend_Form에서 뷰를 생성하는 방법이 있습니까? (읽기 전용)
다음과 같은 옵션이있는 경우 : VIEW | 편집 | DELETE 편집 옵션과 같은 VIEW 옵션을 원하지만 양식 요소가 없으면 값만 원합니다.
이렇게하면 이러한보기를 만드는 데 걸리는 시간을 최소화 할 수 있습니다.
누군가가 그런 것을 알고 있습니까?
CRUD를 처리 할 때 양식 객체에서보기를 생성하는 쉬운 방법이 있는지 궁금합니다.Zend_Form에서 뷰를 생성하는 방법이 있습니까? (읽기 전용)
다음과 같은 옵션이있는 경우 : VIEW | 편집 | DELETE 편집 옵션과 같은 VIEW 옵션을 원하지만 양식 요소가 없으면 값만 원합니다.
이렇게하면 이러한보기를 만드는 데 걸리는 시간을 최소화 할 수 있습니다.
누군가가 그런 것을 알고 있습니까?
헥터 가장 좋은 방법이 될 것으로 보인다 Nabble, show me this에서 :
class Default_View_Helper_FormView extends Zend_View_Helper_Abstract
{
public function formView(Zend_Form $form)
{
$html = "<dl>";
foreach ($form->getElements as $element) {
$html .= "<dt>{$element->getLabel()}</dt>";
$html .= "<dd>{$element->getValue()}</dd>";
}
$html .= "</dl>";
return $html;
}
}
잘 모르겠지만보기 옵션의 경우 모델에서 데이터를 가져올 수 있다고 생각합니다. Zend_Form을 통해 액세스 할 필요가 없습니다.
그러나 양식을 읽기 전용으로 만들려면 요소에 readonly (setAttrib ('readonly', 'readonly')) 특성을 추가 할 수 있습니다.
나의 마지막 프로젝트에서 나는이 딜레마도 가지고 있었다. 내 솔루션이 가장 우아하지 않을 수도 있지만, 그 일을했습니다. 전체 데코레이터 대신 요소를 생성하는 대신 Form viewscript 데코레이터를 사용합니다. 그러나 당신은 내가 상상하는 데코레이터를 사용하기 위해이 예제를 조정할 수 있습니다. 제가 보여주고있는 것은 여러분에게 일반적인 아이디어를주기위한 아주 기본적인 예입니다. 여기에 내가 한 일이 있습니다 :
class Cms_Form_Page extends Zend_Form
{
const FOR_CREATE = 'forCreate';
const FOR_READ = 'forRead';
const FOR_UPDATE = 'forUpdate';
const FOR_DELETE = 'forDelete';
protected $_name = 'page';
private $_for;
private $_viewScripts = array(
self::FOR_CREATE => 'page-manager/partials/form-page-create.phtml',
self::FOR_READ => 'page-manager/partials/form-page-read.phtml',
self::FOR_UPDATE => 'page-manager/partials/form-page-update.phtml',
self::FOR_DELETE => 'page-manager/partials/form-page-delete.phtml'
);
public function __construct($for = self::FOR_CREATE, $options = null)
{
$this->_for = $for;
parent::__construct($options);
}
public function init()
{
$this->setName($this->_name)
->setAttribs(array('accept-charset' => 'utf-8'))
->setDecorators(array(
'PrepareElements',
array('ViewScript', array('viewScript' => $this->_viewScripts[ $this->_for ])),
'Form'
));
$elements = array();
swith($this->_for)
{
case self::FOR_CREATE:
$title = new Zend_Form_Element_Text('title');
$elements[] = $title;
break
case self::FOR_READ:
$id = new Zend_Form_Element_Hidden('id');
$elements[] = $id;
break;
case self::FOR_UPDATE:
$id = new Zend_Form_Element_Hidden('id');
$elements[] = $id;
$title = new Zend_Form_Element_Text('title');
$elements[] = $title;
break;
case self::FOR_DELETE:
$id = new Zend_Form_Element_Hidden('id');
$elements[] = $id;
break;
default:
throw new Exception('invalid Form type');
}
$submit = new Zend_Form_Element_Button('submit');
$elements[] = $submit;
$this->addElements($elements);
}
}
그래서 기본적으로 클래스 생성자 중 하나를 생성자에 전달합니다. 그리고이 값을 기반으로 양식에 필요한 요소와 요소를 렌더링하는 방법을 결정합니다.
예를 들어, 생성을 위해 Locale을 선택할 드롭 다운 양식 필드를 선택할 수 있습니다. 여기에서 삭제하려면 숨겨진 필드 (예 : btw에 표시되지 않음)가됩니다.
희망이 있으시면 몇 가지 아이디어가 있습니다.
PS : 당신이 단순히 같은과 (너무 숨겨진 요소를 렌더링과 함께) 요소의 값 보여줄 수 선택한 viewscripts 중 하나에서
: 그래서
<?
$form = $this->element;
?>
... some html
// let's presume id and locale are hidden form fields for current form type
// (Cms_Form_Page::FOR_UPDATE for instance)
<?= $form->id->renderViewHelper(); ?>
<?= $form->locale->renderViewHelper(); ?>
// and here we simply output the current locale value
// of course, you should have populated the values in the form somewhere first
<dt>Current locale:</dt>
<dd><?= $form->locale->getValue(); ?></dd>
...etc
을, I 폼에 viewscript 데코레이터를 사용하는 것이 가장 좋다고 생각하거나 숨겨진 필드 (필요한 경우)를 렌더링하고 일부 html 태그에 값을 표시하는 자체 양식 요소 데코레이터를 굴릴 수 있습니다.
Thx! 너는 내게 빛을 비춰 주었다. 이를 염두에두고 viewscript 대신 "form-page-read"에 대해 다른 뷰 헬퍼가있을 수 있다고 생각했습니다. 예를 들어 $ value이 될 것입니다. 이 뷰 헬퍼는 $ form-> populate()를 통해 전달 된 값을 에코하여 요소를 렌더링하는 뷰 헬퍼를 제외하고는 일반 폼의 동일한 장식자를 사용합니다. 그걸로 나는 완전한 CRUD 세대를 이룰 수 있다고 생각합니다. –
@Keyne : 정확히! 그것은 제가 제안한 것과 같습니다. :) –
허용 대답 유일한 문제는 당신이 그들을 무시하고 모든 요소를 만들고있는 것입니다.
fireeyedboy의 대답을 통해 제어 논리를 사용하면 모든 요소를 Zend_View_Helper_FormNote
으로 전환 할 수 있습니다. 동일한 작업을 수행합니다.
최적화가 중요한지 여부에 달려 있습니다.
특별한 경우가 될 수있는 일반적인 요소를 충당하기 위해 허용 대답에 몇 가지 사소한 추가를 제작 :
class Default_View_Helper_FormView extends Zend_View_Helper_Abstract
{
public function formView(Zend_Form $form)
{
$html = '<dl>';
foreach ($form->getElements() as $element) {
if($element instanceof Zend_Form_Element_Submit) {
continue;
}
$html .= '<dt>' . $element->getLabel() . '</dt>';
$value = $element->getValue();
if($element instanceof Zend_Form_Element_Checkbox) {
$value = ($value) ? 'Yes' : 'No';
}
else if($element instanceof Zend_Form_Element_Select) {
$value = $element->getMultiOption($value);
}
$html .= '<dd>' . $value . '</dd>';
}
$html .= '</dl>';
return $html;
}
}
왜보기가 입력 요소를 제외하고 양식에 모두 정확하게 할 때 처음부터보고, 만들고? 실제 CRUD 생성을 위해서는 자동화가 필요하다고 생각합니다. –