【问题标题】:When should I use Widgets/HTML in Yii2?什么时候应该在 Yii2 中使用 Widgets/HTML?
【发布时间】:2014-11-30 15:59:50
【问题描述】:

我已经能够在 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 小部件以使它们的行为与模板的 sn-ps 一样(无论如何都包含 JS/CSS 文件以获取结构和外观)。我目前的方法有什么损失/风险?

【问题讨论】:

    标签: twitter-bootstrap yii yii2


    【解决方案1】:

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

    • 您可以轻松自定义它们
    • 您可以让他们受益,从而提高您的开发速度
    • 创建它们是为了减少开发时间和代码大小
    • 使用主题可以提高代码的可读性
    • 它们与核心框架兼容
    • 它们满足安全问题
    • 你用 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'] : []
    ]);
    

    上面的小部件尽可能简单地生成面包屑。但是考虑一个示例,您可能需要将活动项目设为Bold。轻松:

    Breadcrumbs::widget([
        'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [],
        'activeItemTemplate'=>'<li class=\"active\"><b>{link}</b></li>'
    ]);            
    

    回答,什么时候使用Widgets?我建议,永远!除非你需要做一些 Yii 小部件不支持的非常特殊的事情。

    【讨论】:

    • 谢谢。现在我看到我的工作可以变得多么容易和快捷。可以省略的过程的可视化,也是!
    • @mijopabe 不客气,亲爱的。 Yii真的很强大。请仔细阅读文档以使用 Yii 的所有功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2011-07-19
    • 2023-04-02
    • 2011-04-15
    • 2017-04-10
    • 2012-03-19
    • 2018-05-12
    相关资源
    最近更新 更多