Yii2 使用tabs小部件将ActiveForm字段拆分为不同的选项卡

Yii2 使用tabs小部件将ActiveForm字段拆分为不同的选项卡,yii2,yii-widgets,Yii2,Yii Widgets,我正在创建一个表单视图,我想使用官方的tabs小部件,用tabs结构组织表单字段 是否可以使用包含活动表单字段的div元素的id(或class)初始化Tabs小部件?一个示例,说明如何管理它,如下所示: 首先,将联系人表单划分为每个选项卡的一个视图文件 将ActiveForm::begin()和ActiveForm::end()放在Tabs::widget()周围 使用参数$model和$form将联系人表单页面呈现为内容 示例代码: views/site/contact.php views

我正在创建一个表单视图,我想使用官方的tabs小部件,用tabs结构组织表单字段


是否可以使用包含活动表单字段的div元素的id(或class)初始化Tabs小部件?

一个示例,说明如何管理它,如下所示:

  • 首先,将联系人表单划分为每个选项卡的一个视图文件
  • 将ActiveForm::begin()和ActiveForm::end()放在Tabs::widget()周围
  • 使用参数$model和$form将联系人表单页面呈现为内容
  • 示例代码:

    views/site/contact.php

    
    
    views/site/contact_form1.php

    
    
    views/site/contact_form2.php

    
    
    只需在contact.php global$表单顶部添加;而且一切正常。

    我有另一个解决方案:

    当我们调用
    $form->field($model,'name')->textInput()
    时,它将返回类的模型
    yii\widgets\ActiveField
    ,因此只需继续调用该类的方法作为
    $form->field($model,'name')->textInput()->render()
    。它将返回一个字符串,然后您可以将其用于选项卡的内容。 我的应用程序中有一个翻译多种语言的示例代码,如下所示:

    <?php
    $items = [];
    foreach ($translateModels as $translateModel) {
        $tabContent = $form->field($translateModel, "[{$translateModel->code}]name")->textInput()->render();
        $items[] = [
            'label' => $translateModel->language->name,
            'content' => $tabContent,
        ];
    }
    ?>
    <?= Tabs::widget([
        'options' => [
            'class' => 'nav-tabs',
            'style' => 'margin-bottom: 15px',
        ],
        'items' => $items,
    ]) ?>
    
    
    

    可能有帮助。

    您的问题不清楚,也不明确,请详细解释您到底想做什么。嗨,我需要创建一个tabs小部件,但我需要在视图中用div初始化每个选项卡的内容。为什么不让表单环绕选项卡,您只需提交整个内容即可。如果您需要对每个选项卡进行验证,那么您可以使用场景在表单的每个帖子上验证相同的模型。您好,看起来还可以,但是如何在表单周围插入一个TabsWidget wrapepd?有相同的问题,有人知道解决方案吗?我在呈现文件中收到一个错误,因为未定义变量表单。。你能解决这个问题吗?
    <?= $form->field($model, 'name') ?>
    <?= $form->field($model, 'email') ?>
    <?= $form->field($model, 'subject') ?>
    
    <?php
    use yii\helpers\Html;
    use yii\captcha\Captcha;
    ?>
    
    <?= $form->field($model, 'body')->textArea(['rows' => 6]) ?>
    <?= $form->field($model, 'verifyCode')->widget(Captcha::className(), [
        'template' => '<div class="row"><div class="col-lg-3">{image}</div><div    class="col-lg-6">{input}</div></div>',
    ]) ?>
    <div class="form-group">
    <?= Html::submitButton('Submit', ['class' => 'btn btn-primary', 'name' => 'contact-button']) ?>
    </div>
    
    <?php
    $items = [];
    foreach ($translateModels as $translateModel) {
        $tabContent = $form->field($translateModel, "[{$translateModel->code}]name")->textInput()->render();
        $items[] = [
            'label' => $translateModel->language->name,
            'content' => $tabContent,
        ];
    }
    ?>
    <?= Tabs::widget([
        'options' => [
            'class' => 'nav-tabs',
            'style' => 'margin-bottom: 15px',
        ],
        'items' => $items,
    ]) ?>