在Cakephp3中找不到自定义异常

时间:2017-02-17 14:26:41

标签: php class exception directory cakephp-3.0

我想在CakePhp应用程序中创建和使用自定义异常类。

所以我创建了一个DuplicateConfigurationException.php,其中包含以下类骨架:

<?php
namespace Cake\Exception;
class DuplicateConfigurationException extends Exception{

} ?>

我是一个控制器,我希望提出异常,我添加了

use Cake\Exception\DuplicateConfigurationException;

并在我调用的函数中

throw new DuplicateConfigurationException();

在整个interwebs中提出建议后,我试图将php文件放在以下位置,但它们似乎都不起作用:

SRC /异常 SRC /异常 SRC /库 SRC / LIB /错误 SRC / LIB /错误/异常

我总是收到错误:

Error: Class 'Cake\Exception\DuplicateConfigurationException' not found
File /host/var/www/src/Controller/StructuresController.php
Line: 246

我还需要做些什么来让Cake识别我的自定义异常?

我很清楚Loading custom class in CakePHP3,但由于这个例外不是一个单独的库,我宁愿不把它放在供应商中吗?

2 个答案:

答案 0 :(得分:3)

有点晚了,但我认为对于有相同问题的其他用户进行进一步的解释可能会有用。

事实上,使用您的解决方案,您依赖于位于全局命名空间中的本机PHP SPL异常类。

要使用Cake的基本Exception课程,您错过了添加

use Cake\Core\Exception\Exception;

src/Exceptions/DuplicateConfigurationException.php中加载Cake Exception类构造函数。见Cake's book

您的代码正在运行,因为Cake正在以与其自己的Exception类相同的方式处理SPL异常。如果你想进一步使用自定义处理程序,可能会破坏逻辑。

请注意class IniPermissionsException extends \Cake\Core\Exception\Exception {};也有效。在这种情况下,在extends语句中调用类时,必须将\作为根命名空间前置,因为您需要提供完整的命名空间路径。

要在Cake的名称空间中像海豚一样游泳,只需转到API reference

src/Exceptions/DuplicateConfigurationException.php的完整更新代码:

<?php

namespace App\Exceptions;

use Cake\Core\Exception\Exception;

class DuplicateConfigurationException extends Exception {}

?>

答案 1 :(得分:1)

好的,经过一番摆弄,我设法让它发挥作用:

在src / Exceptions / DuplicateConfigurationException.php

<?php 
namespace App\Exceptions;
class DuplicateConfigurationException extends \Exception{

} ?>

在控制器中:

use App\Exceptions\DuplicateConfigurationException;
...
function somefunction(){
   throw new DuplicateConfigurationException();
}

显然名称空间应该是App \&lt; Folder&gt;和App \&lt; Folder&gt; \&lt; Classname&gt;,分别。

我不得不在Exception中添加反斜杠,因为它在命名空间的上下文中使用:http://www.php.net/manual/en/language.namespaces.global.php

但是,我不确定CakePhp 3的命名空间约定在哪里记录。