php - 在 Yii 上创建小部件的步骤?

标签 php yii

我在给定 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/

相关文章:

yii - CListView - 添加序列号

php - 在全动态和重数据库网站中使用memcached好吗?

php - 保存 woocommerce 产品后,什么是 wordpress/woocommerce 钩子(Hook)?

php - 显示每种颜色的值

php - 如何在 yii 中编写带有连接的查询?

php - Yii 验证特定字段

php - mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows 等...期望参数 1 是资源

php - laravel 4 文件名后备只能包含 ASCII 字符

php - SET NOCOUNT ON 在 ubuntu 下不起作用

php - Yii 框架 : role based access control