【问题标题】:Yii2 check if a package is defined or notYii2 检查一个包是否被定义
【发布时间】:2017-04-12 01:48:49
【问题描述】:

在另一个 Yii2 应用程序中,我使用了一个名为 navatech/yii2-roxymce 的包来将 textarea 替换为 HTMl 可编辑框。在当前的应用程序中,我不想使用它,而我想让所有东西都易于重用。换句话说,我想要一个条件检查,如果安装了包就调用它,如果没有调用普通的活动表单 textarea。

我尝试过class_exists,如下所示:

<?php
// _form.php code
use yii\helpers\Html;
use yii\widgets\ActiveForm;
use yii\helpers\Url;
use navatech\roxymce\widgets\RoxyMceWidget;
......
<?php if (class_exists('RoxyMceWidget')): ?>
  <?= RoxyMceWidget::widget([
    'model'       => $model, //your Model, REQUIRED
    'attribute'   => 'content', //attribute name of your model, REQUIRED if using 'model' section
    'name'        => 'Post[content]', //default name of textarea which will be auto generated, NOT REQUIRED if using 'model' section
    'value'       => isset($_POST['Post']['content']) ? $_POST['Post']['content'] : $model->content, //default value of current textarea, NOT REQUIRED
    'action'      => Url::to(['roxymce/default']), //default roxymce action route, NOT REQUIRED
    'options'     => [//TinyMce options, NOT REQUIRED, see https://www.tinymce.com/docs/
        'title' => 'RoxyMCE',//title of roxymce dialog, NOT REQUIRED
        'height' => 450,
    ],

]);?>
  <?php else: ?> 
  <?= $form->field($model, 'content')->textarea(['rows' => 14]);?>
  <?php endif; ?>
.....

但是,在使用 composer 安装 navatech\roxymce\widgets\RoxyMceWidget 后,条件语句给出了相同的结果。即打印普通的 activeform 文本区域,因此 class_exists 似乎总是返回 false,尽管正在安装小部件。

是否有其他正确的方法来检查是否找到了包?

【问题讨论】:

    标签: php yii2 composer-php


    【解决方案1】:

    您必须为该类提供完全限定的命名空间。

    class_exists('navatech\roxymce\widgets\RoxyMceWidget')
    

    【讨论】:

    • class_exists 不知道。
    【解决方案2】:

    使用 prs4 你必须包含命名空间:

    class_exists('navatech\roxymce\widgets\RoxyMceWidget')

    或:

    class_exists(RoxyMceWidget::className()) 如果它已经在 use 语句中定义。


    更新:您应该使用最新版本的yii2-roxymce,当前是2.0.0.1

    【讨论】:

    • className 的第二个解决方案不是完整的解决方案。假设在use 中定义的类但没有安装。在这种情况下,将生成一条错误消息。
    • 你是对的。所以class_exists('navatech\roxymce\widgets\RoxyMceWidget') 是唯一的解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 2020-12-19
    相关资源
    最近更新 更多