1

ここに、通常の Yii コントローラ内のコードの重要な部分を示します。

Yii::import('application.vendors.*');
    require_once('redbean/rb.php');

$config = Yii::app()->getComponents(false);

R::setup($config['db']['connectionString'],
$config['db']['username'],
$config['db']['password'])

$guest = R::dispense( 'guest' );
$guest->email = $row['Guest Email'];

エラーは、dispens() 行で発生します。

include(Model_Guestx.php) function.include: ストリームを開けませんでした: そのようなファイルやディレクトリはありません (パスは編集されました \framework\YiiBase.php:418)

#0パス編集\framework\YiiBase.php(418): CWebApplication->handleError()

問題は、Yii が redbean が処理しようとしているのと同じ名前のモデルをロードしようとするのはなぜですか?

ありがとう!

ケン

4

4 に答える 4

0

より普遍的なものにしたい場合は、イベント beforeControllerAction() および afterControllerAction() を使用して、redbena 専用のベース コントローラーで Yii オートロードを無効および有効にしてみませんか。または、redbean のみを使用したい場合です。

お気に入り:

public function beforeControllerAction(){
spl_autoload_unregister(array('YiiBase','autoload'));   
// other code to execute...
parent::beforeControllerAction(); 
}

    public function afterControllerAction(){
spl_autoload_register(array('YiiBase','autoload'));

// other code to execute...
parent::afterControllerAction();
}
于 2012-06-06T20:12:09.690 に答える
0

Yii には独自のクラス オートローダーがあり、どういうわけか (おそらくモデルが存在するかどうかを確認するとき)、Redbean は PHP ファイルのような文字列を作成します。そこで、Yii はそれを含めようとします。

Redbean を使用する前に、yii オートローダーを無効にすることができます。終了後に再度有効にします。

    // Turn off our amazing library autoload 
    spl_autoload_unregister(array('YiiBase','autoload'));   

    Yii::import('application.vendors.*');
    require_once('rb.php');

    R::setup('mysql:host=localhost;dbname=dbname', 'user', 'password');

    $guest = R::dispense('guest');
    $guest->email = $row['Guest Email'];

    // Once we have finished using the library, give back the 
    // power to Yii... 
    spl_autoload_register(array('YiiBase','autoload'));


    $this->render('index');

クレジット: http://www.yiiframework.com/wiki/101/how-to-use-phpexcel-external-library-with-yii/

于 2012-04-04T11:15:46.393 に答える