我在给定 View 上有以下代码:
<?php
$form = $this->beginWidget('CActiveForm', array(
'id' => 'home-newsletter-form',
'enableAjaxValidation' => false,
'enableClientValidation' => true,
));
echo $form->textField($newsletterSubscribeForm, 'email');
echo $form->error($newsletterSubscribeForm, 'email');
echo CHtml::link("subscribe", "#", array('class'=>'btSubscribe'));
$this->endWidget();
?>
碰巧我需要在 MORE 而不是一个 View 上使用它,所以我发现一个小部件是更好的选择。 但是,我希望将它放在一个单独的文件中(在 app/widgets/文件夹中),并在每个 View 上调用。
谁能告诉我我们应该遵循哪些步骤才能实现这一目标?
最佳答案
Widget 是这里最好的解决方案,它还能使您的代码保持干燥(不要重复自己 - 关注可重用性)。
<?php
// protected/components/SubscriberFormWidget.php
class SubscriberFormWidget extends CWidget
{
/**
* @var CFormModel
*/
public $form;
public function run()
{
if (! $this->form instanceof CFormModel) {
throw new RuntimeException('No valid form available.');
}
$this->render('subscriberFormWidget', array('form'=>$this->form));
}
}
和 View :
<?php
// protected/components/views/subscriberFormWidget.php
$form = $this->beginWidget('CActiveForm', array(
'id' => 'home-newsletter-form',
'enableAjaxValidation' => false,
'enableClientValidation' => true,
));
echo $form->textField($newsletterSubscribeForm, 'email');
echo $form->error($newsletterSubscribeForm, 'email');
echo CHtml::link("subscribe", "#", array('class'=>'btSubscribe'));
$this->endWidget();
任何 View 中的示例用法
<?php $this->widget('SubscriberFormWidget', array(
'form' => $newsletterSubscribeForm
)); ?>
关于php - 在 Yii 上创建小部件的步骤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8447959/