Yii:如果DB连接失败,如何捕获错误并重定向

Yii:如果DB连接失败,如何捕获错误并重定向,yii,Yii,有时我的应用程序无法连接到数据库 如何捕获并重定向到statis页面 CDbConnection无法打开数据库连接:SQLSTATE[42000][1049]未知数据库“给定\u DB” 您可以在下面的组件数组中进行设置 'cache' => array('class' => 'system.caching.CDbCache'), 您可以在下面的组件数组中进行设置 'cache' => array('class' => 'system.caching.CDbCache

有时我的应用程序无法连接到数据库

如何捕获并重定向到statis页面


CDbConnection无法打开数据库连接:SQLSTATE[42000][1049]未知数据库“给定\u DB”

您可以在下面的组件数组中进行设置

'cache' => array('class' => 'system.caching.CDbCache'),

您可以在下面的组件数组中进行设置

'cache' => array('class' => 'system.caching.CDbCache'),

你不能创建自己的500错误页面吗?
查看此项了解更多信息:

您不能创建自己的500错误页面吗?
查看此项了解更多信息:

这不是最干净的解决方案,但您可以创建自定义的
DbConnection
组件:

class DbConnection extends CDbConnection
{
    public function open()
    {
        try {
            parent::open();
        } catch(CDbException $e) {
            Yii::app()->request->redirect(array('site/maintenance'));
        }
    }
}
'components' => array(
    'db' => array(
        'class' => 'DbComponent',
然后将其配置为
db
组件:

class DbConnection extends CDbConnection
{
    public function open()
    {
        try {
            parent::open();
        } catch(CDbException $e) {
            Yii::app()->request->redirect(array('site/maintenance'));
        }
    }
}
'components' => array(
    'db' => array(
        'class' => 'DbComponent',
缺点是:

  • 将只在网络上工作,并破坏您的控制台应用程序
  • 要求
    site/maintenance
    绝对不允许任何数据库访问,否则您将陷入无限重定向循环

这不是最干净的解决方案,但您可以创建自定义的
DbConnection
组件:

class DbConnection extends CDbConnection
{
    public function open()
    {
        try {
            parent::open();
        } catch(CDbException $e) {
            Yii::app()->request->redirect(array('site/maintenance'));
        }
    }
}
'components' => array(
    'db' => array(
        'class' => 'DbComponent',
然后将其配置为
db
组件:

class DbConnection extends CDbConnection
{
    public function open()
    {
        try {
            parent::open();
        } catch(CDbException $e) {
            Yii::app()->request->redirect(array('site/maintenance'));
        }
    }
}
'components' => array(
    'db' => array(
        'class' => 'DbComponent',
缺点是:

  • 将只在网络上工作,并破坏您的控制台应用程序
  • 要求
    site/maintenance
    绝对不允许任何数据库访问,否则您将陷入无限重定向循环

为此,您需要将其从配置中的组件中删除并手动激活。其他方法(我不推荐)更改CDbConnection抛出异常的open()函数。@ineersa:绝对不是。@IonutFlaviusPogacian:Yii的错误处理机制可以毫无困难地处理此问题。你有吗?是的,我有;这不是mi的错误,而是权限模块中的问题,该模块会干扰YIS控制器;也许这是一个错误,您需要从配置中的组件中删除它并手动激活它。其他方法(我不推荐)更改CDbConnection抛出异常的open()函数。@ineersa:绝对不是。@IonutFlaviusPogacian:Yii的错误处理机制可以毫无困难地处理此问题。你有吗?是的,我有;这不是mi的错误,而是权限模块中的问题,该模块会干扰YIS控制器;可能是一个错误,它将如何帮助捕获建立CDB连接时的错误?以及它将如何帮助捕获建立CDB连接时的错误?是的,我知道这一点,但我的应用程序中有一些错误;在我仔细观察之后,结果发现权限模块把事情搞糟了,因为我的主控制器以某种方式扩展了权限模块,因此出现了一个循环,错误从未发生过;在以同样的方式完成之后,这次使用基本控制器,它就像一个charmyes一样工作,我知道这一点,但我的应用程序中出现了一些错误;在我仔细观察之后,结果发现权限模块把事情搞糟了,因为我的主控制器以某种方式扩展了权限模块,因此出现了一个循环,错误从未发生过;在以同样的方式完成之后,这次使用基本控制器,它就像一个符咒一样工作