yii2 - Yii2 Boostrap ActiveForm 水平布局
问题描述
下午好,
我是编程新手,很难用 Bootstrap 理解 Yii2 布局。
我所追求的真的很简单,所以我想,但我似乎无法让它远程工作。我想在每个输入前面创建一个带有标签的水平表单,并且能够控制每个输入的宽度。
在我当前的代码中,我有 2 个简单字段,我希望第一个跨越表单的一半(col-md-6
),第二个应该跨越整个表单(col-md-12
),但这不起作用,我不明白为什么我正在努力解决它。
下面是我的看法
<?php
use yii\helpers\Html;
use yii\helpers\ArrayHelper;;
use yii\bootstrap\ActiveForm; //used to enable bootstrap layout options
/* @var $this yii\web\View */
/* @var $model backend\models\Projects */
/* @var $form yii\widgets\ActiveForm */
?>
<div class="projects-form">
<?php
$form = ActiveForm::begin([
'id'=>$model->formName(),
'layout' => 'horizontal',
'class' => 'form-horizontal',
'fieldConfig' => [
'enableError' => true,
]
]);
?>
<h2>Project Information</h2>
<h3>General Information</h3>
<div class="form-group row">
<div class="col-md-6">
<?php
echo $form->field(
$model,
'ProjNo'
)->textInput(['maxlength' => true]);
?>
</div>
<div class="col-md-6">
</div>
</div>
<div class="form-group row">
<div class="col-md-12">
<?php
echo $form->field(
$model,
'ProjName'
)->textInput(['maxlength' => true]);
?>
</div>
</div>
<p></p>
<p></p>
<?php
ActiveForm::end();
?>
</div>
这是_form
在创建和更新视图中调用的视图。
我不太明白为什么标签对齐方式不一致,因为我为整个字段指定了不同的宽度,为什么即使我指定col-md-12
了 (根据我的理解应该是全宽),它似乎只需要大约一半可用宽度。
任何帮助是极大的赞赏!
谢谢你。
我只希望标签对齐并能够拥有不同宽度的字段。在上面,当我更改类时,标签会更改对齐方式。
解决方案
您可以使用template
下面的表单选项下的fieldConfig
选项来指定输入、标签和错误块的顺序,这些设置将在整个表单中应用于所有输入,在下面的配置中,我将标签放在输入之后如果你愿意,你可以改变它。
$form = yii\bootstrap\ActiveForm::begin ( [ 'id' => $model->formName () ,
'layout' => 'horizontal' ,
'class' => 'form-horizontal' ,
'fieldConfig' => [
'enableError' => true ,
'template' => '{input}{error}{label}',
] ] );
你可以用 div包裹{label}
and{input}
'template' => '<div class="col-sm-6">{input}{error}</div>
<div class="col-sm-3">{label}</div>',
HTML
并从您的视图中删除所有额外的内容,只需将其包裹$form->field()
起来,row
请参见下文
$form = yii\bootstrap\ActiveForm::begin ( [ 'id' => $model->formName () ,
'layout' => 'horizontal' ,
'class' => 'form-horizontal' ,
'fieldConfig' => [
'enableError' => true ,
'template' => '<div class="col-sm-6">{input}{error}</div>{label}',
] ] );
?>
<h2>Project Information</h2>
<h3>General Information</h3>
<div class="row">
<?php
echo $form->field (
$model , 'ProjNo'
)->textInput ( [ 'maxlength' => true, ] );
?>
</div>
<div class="row">
<?php
echo $form->field (
$model , 'ProjName'
)->textInput ( [ 'maxlength' => true, ] );
?>
</div>
EDIT
根据讨论,您不需要相同对齐的标签和输入,而是希望每行中的变量输入和标签,为此,您需要分别配置输入字段的模板部分,如果我理解正确,它可以如下所示
您应该像下面一样配置表单选项和字段选项,并通过手动分配template
标签来删除标签上应用的额外类col-sm-3
control-label
$form = yii\bootstrap\ActiveForm::begin ( [ 'id' => $model->formName () ,
'layout' => 'horizontal' ,
'class' => 'form-horizontal' ,
'fieldConfig' => [
'enableError' => true ,
'options' => [
'class' => ''
]
] ] );
?>
<h2>Project Information</h2>
<h3>General Information</h3>
<div class="row">
<?php
echo $form->field (
$model , 'name' , [ 'template' => '<div class="col-sm-2">{label}</div><div class="col-sm-4">{input}{error}</div>' , ]
)->textInput ( [ 'maxlength' => true ] )->label ( null , [ 'class' => 'control-label' ] )
?>
<?php
echo $form->field (
$model , 'price' , [ 'template' => '<div class="col-sm-2">{label}</div><div class="col-sm-4">{input}{error}</div>' , ]
)->textInput ( [ 'maxlength' => true ] )->label ( null , [ 'class' => 'control-label' ] );
?>
</div>
<div class="row">
<?php
echo $form->field (
$model , 'product_subcategory' , [ 'template' => '<div class="col-sm-2">{label}</div><div class="col-sm-10">{input}{error}</div>' , ]
)->textInput ( [ 'maxlength' => true , ] )->label ( null , [ 'class' => 'control-label' ] );
?>
</div>
<?php
echo yii\bootstrap\Html::submitButton ( 'Submit' );
yii\bootstrap\ActiveForm::end ();
希望这可以帮助你
推荐阅读
- sql-server - SQL:输出多个左连接行作为csv文件的一条记录
- configuration - Nat - 虚拟服务器配置
- sql - SQL Server 分组依据?
- r - 我可以在同一个 Shiny App 中使用 highcharter 和 ggplot 吗?
- ios - 如何在 UITextField 的 shouldChangeCharactersIn 中有效处理多个文本字段
- powershell - 通过 PowerShell 使用搁置集触发 TFS vNext Gated 构建
- r - 从 R 变量创建汇总表
- c# - 如果我要创建内存数据表,是否需要 .BeginEdit() 和 .EndEdit()?
- javascript - 使用 Nokogiri 抓取使用 Javascript 的网站
- r - Flexdashboard,rhandsontable:如何以编程方式访问用户更新的表?