我已经能够在Yii2中应用自定义的Themeforest Bootstrap模板,并且对于Yii框架来说是全新的,我不知道在渲染表单时使用标准html-bootstrap语法的好处/缺陷(搜索输入,按钮,导航)为用户。据我所知,不鼓励偏离任何一般框架。是否值得为每个单独的视图创建小部件的麻烦,或者我应该改变模板很少但是将Yii功能分配给它的各个部分?
例如,我使用的是模板标题/导航的未更改版本,其中包含列表项:
<li>
<?= Html::a('Discover', ['site/discover']) ?>
</li>
<li>
<?php if (Yii::$app->user->isGuest) {
echo Html::a('Sign Up', ['site/signup']);
echo "</li>";
echo "<li>";
echo Html::a('Login', ['site/login']);
} else {
echo "<form method='post'>";
echo Html::a('Logout (' . Yii::$app->user->identity->username . ')', ['site/logout'],[ 'data-method'=>'post']);
echo "</form>";
} ?>
</li>
这允许引导程序和模板CSS文件保持不受影响。但这是否是使用Yii2的可接受方式?或者,我是否应该扩展每个现有的Bootstrap-Yii小部件,以使它们像模板的片段已经完成一样(无论如何都包含JS / CSS文件以获得结构和外观)。我目前采用的方法是什么?失去/冒险?
答案 0 :(得分:2)
这是您的选择,但强烈建议您将这些小部件用作:
例如,您可以创建如下链接:
<a href="<?= Url::toRoute('site/index'); ?>" onclick="clicked()" class="css-class">Click Here!</a>
但是Html
:
Html::a('Click Here!', ['site/index'], ['class'=>'css-class','onclick'=>'clicked']);
使用Widgets
时,您可以更好地使用它:
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'name')->textInput(['maxlength' => 2]) ?>
<?php ActiveForm::end(); ?>
以上代码将生成:
<form id="w0" action="route" method="post">
<input type="hidden" name="_csrf" value="REdDYWZPWms2dCQlEwgQW3MKDwY5Cj89EhgtJ1UcLwwdECVQNXcIPA==">
<div class="form-group field-name required">
<label class="control-label" for="name">Name</label>
<input type="text" id="name" class="form-control" name="Form[name]" maxlength="2">
<div class="help-block"></div>
</div>
</form>
对于Yii2的引导程序小部件,这是相同的。但是,您可以自定义所有这些。例如:
Breadcrumbs::widget([
'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : []
]);
以上窗口小部件尽可能简单地生成面包屑。但请考虑一个示例,您可能需要将活动项目粗体。容易:
Breadcrumbs::widget([
'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [],
'activeItemTemplate'=>'<li class=\"active\"><b>{link}</b></li>'
]);
要回答,何时使用小部件?我建议,永远!除非你需要做一些非常特别的事情,Yii小部件不支持。