2011-09-15 9 views
1

、(私は、Windowsのローカルホスト上のYii、XAMPPを使用しています)、この問題で私を助けてください:だからのYiiカスタムウィジェット、ローダエラー

...私は「の新しいウィジェットが\コンポーネントを保護し作成しました\ views \ Magus.php "を参照してください。

<?php 
    class Magus extends CWidget { 

    ////////////////////////////// 
    public function run() 
    { 
    echo '<p style="color:blue; ">Trallala :) !</p>'; // do something. 
    } 
    ////////////////////////////// 

} //end class 

それは、( "保護/ビュー/レイアウト/ main.php")ここで使われています:

<?php 
    $this->widget('/views/Magus'); 
?> 

そして、これは、ローダーエラー原因(?):

Fatal error: include() [<a href='function.include'>function.include</a>]: 
Cannot redeclare class magus in C:\xampp\htdocs\yii\framework\YiiBase.php on line 421 

しかし、ウィジェットファイルが "protected \ components"に直接配置されていると、エラーは発生しません。そのエラーの原因とその修正方法は何ですか?前もって感謝します !

答えて

5

パスが間違っています。 私はあなたがprotected/components/Magus.phpにあなたのウィジェットのphpファイルを配置することをお勧めします。次に、

$this->widget('application.components.Magus'); 

でビューからそれを呼び出すことができますまたはあなたは、あなたがそれを持っているフォルダにそれを維持し、このようにそれを呼び出すことができます。

$this->widget('application.components.views.Magus'); 
+0

あなたの非常に正確な答えJohnatanありがとう!私はローディングパスを定義するより複雑な方法を知っていましたが、まだ "application.components"の部分を必要としないショートカットを期待していました。 – Sebastian

+0

メインの設定ファイルを使用してコンポーネントディレクトリを自動ロードする場合は、おそらくクラス名だけを使用するか、[setPathOfAlias](http://www.yiiframework.com/doc/api/1.1)を使用することもできます。/YiiBase#setPathOfAlias-detail)、エイリアス名を使用します。 – ldg

関連する問題