Redbean и Yii конфликтуют? - PullRequest
1 голос
/ 23 марта 2012

Итак, вот важные биты кода внутри обычного контроллера 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'];

Ошибка происходит в строке выдачи ().

include (Model_Guestx.php) function.include: не удалось открыть поток: нет такой файл или каталог ( путь отредактированный \ framework \ YiiBase.php: 418)

# 0
путь отредактировано \ framework \ YiiBase.php (418): CWebApplication-> handleError ()

Вопрос в том, ПОЧЕМУ Yii пытается загрузить модель с тем же именем, что и красная роза?

Спасибо!

Ken

Ответы [ 4 ]

1 голос
/ 03 мая 2013

Я не знаю, что вызывает автозагрузчик Yii, но вы можете включить следующий код, чтобы Yii пропустил любые модели, созданные Redbean:

public static function autoload($className)
    {
    if(!strncmp("Model_", $className, strlen("Model_")))
        return true;
    //...rest of yii code...

Если вы добавите это в началоКод YiiBase.php будет игнорировать модели, начинающиеся с «Model_», что и использует Redbean.Я знаю, что это хак, но если вы не создадите модели, которые вы собираетесь использовать с Yii, которые попадают в эту категорию имен, это не должно быть проблемой.

0 голосов
/ 04 декабря 2013

Если вы хотите использовать Readbean ORM без какой-либо опции, вы можете использовать запросы типа Redbean, такие как

$result = R::$f->begin()->select('*')->from('users')->where(' username = ? ')->put($_xusername)->get('row');

здесь вам не нужно регистрировать или отменять регистрацию автозагрузок

0 голосов
/ 07 июня 2012

Если вы хотите сделать его более универсальным, почему бы не использовать события beforeControllerAction () и afterControllerAction () для отключения и включения автозагрузки Yii в базовом контроллере, выделенном для redbena, или если вы хотите использовать только 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();
}
0 голосов
/ 04 апреля 2012

Yii имеет свой собственный автозагрузчик классов, и каким-то образом (возможно, при проверке, существует ли модель) Redbean создает строку, похожую на файл PHP. Таким образом, Yii пытается включить его.

Вы можете отключить автозагрузчик yii перед работой с Redbean; затем включите его после того, как закончите:

    // 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/

...