我什么时候应该在Yii2中使用Widgets / HTML?

时间:2014-11-30 15:59:51

标签: twitter-bootstrap yii yii2

我已经能够在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文件以获得结构和外观)。我目前采用的方法是什么?失去/冒险?

1 个答案:

答案 0 :(得分:2)

这是您的选择,但强烈建议您将这些小部件用作:

  • 您可以轻松自定义
  • 您可以从中受益,以提高您的开发速度
  • 创建它们是为了减少开发时间和代码大小
  • 使用主题可以提高代码的可读性
  • 它们与核心框架兼容
  • 他们满足安全问题
  • 您使用PHP编码

例如,您可以创建如下链接:

<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小部件不支持。