所以这里是普通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'];
错误发生在allocse()行。
include(Model_Guestx.php)function.include:无法打开流:否 这样的文件或目录(路径 编辑 \ framework \ YiiBase.php:418)
#0 路径 编辑 \ framework \ YiiBase.php(418):CWebApplication-> handleError()
问题是为什么Yii试图加载一个名称与redbean同名的模型?
谢谢!
肯
答案 0 :(得分:1)
我不知道是什么触发了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一起使用的模型,它们属于该命名类别,否则它不应该是一个问题。
答案 1 :(得分: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/
答案 2 :(得分: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();
}
答案 3 :(得分:0)
如果你想在没有任何选项的情况下使用Readbean ORM,你可以使用类似
的redbean查询$result = R::$f->begin()->select('*')->from('users')->where(' username = ? ')->put($_xusername)->get('row');
这里你不需要注册或取消注册自动加载