2016-11-28 105 views
1

在另一個Yii2應用程序中,我使用一個名爲navatech/yii2-roxymce的包來替換textarea HTMl可編輯框。在當前的應用程序中,我不想使用它,而我想讓所有的東西都易於重用。換句話說,我想要一個條件檢查說,如果安裝包已經安裝調用它,如果沒有調用普通的活動表單textarea。Yii2檢查包是否被定義

我試圖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; ?> 
..... 

然而,navatech\roxymce\widgets\RoxyMceWidget使用作曲家安裝後,條件語句給出了相同的結果。即打印普通活動形式文本區域,所以class_exists似乎總是返回false,儘管小部件正在安裝。

有沒有其他正確的方法來檢查包是否被找到?

回答

2

您必須爲該類提供完全限定的名稱空間。

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

但它已經在'use'聲明定義的電流? – SaidbakR

+1

'class_exists'不知道。 – Bizley

0

與prs4您必須包括命名空間:

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

或:如果它已經在使用語句中定義

class_exists(RoxyMceWidget::className())


更新:你應該使用的yii2-roxymce最新版本,是2.0.0.1

+0

'className'的第二個解決方案不是完整的解決方案。假設'use'中定義的類沒有安裝。在這種情況下,將會生成一條錯誤消息。 – SaidbakR

+1

你是對的。所以'class_exists('navatech \ roxymce \ widgets \ RoxyMceWidget')'只是解決方案 –