在Cakephp3中未找到自定义异常

在Cakephp3中未找到自定义异常,php,class,exception,directory,cakephp-3.0,Php,Class,Exception,Directory,Cakephp 3.0,我想在我的CakePhp应用程序中创建并使用一个自定义异常类 因此,我使用以下类框架创建了DuplicateConfigurationException.php: <?php namespace Cake\Exception; class DuplicateConfigurationException extends Exception{ } ?> 在一个函数中,我调用 throw new DuplicateConfigurationException(); 在整个互联网站中,

我想在我的CakePhp应用程序中创建并使用一个自定义异常类

因此,我使用以下类框架创建了DuplicateConfigurationException.php:

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

} ?>
在一个函数中,我调用

throw new DuplicateConfigurationException();
在整个互联网站中,我一直在尝试将php文件放置在以下位置,但这两个位置都不起作用:

src/例外 src/例外情况 src/Lib src/Lib/Error src/Lib/Error/Exceptions

我总是会出错:

Error: Class 'Cake\Exception\DuplicateConfigurationException' not found
File /host/var/www/src/Controller/StructuresController.php
Line: 246
我还需要做什么才能使蛋糕识别我的自定义异常


我很清楚,但由于此异常不是一个单独的库,我不希望将其放在供应商中?

好的,经过一些修改后,我成功地使其工作:

在src/Exceptions/DuplicateConfigurationException.php中

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

} ?>
显然,名称空间应该分别为App\和App\

我必须在异常前面加一个反斜杠,因为它是在名称空间上下文中使用的:


尽管如此,我还是不确定CakePhp 3的名称空间约定是在哪里记录的。

好的,在做了一些修改之后,我成功地使它工作了:

在src/Exceptions/DuplicateConfigurationException.php中

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

} ?>
显然,名称空间应该分别为App\和App\

我必须在异常前面加一个反斜杠,因为它是在名称空间上下文中使用的:


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

有点晚了,但我认为对其他有同样问题的用户来说,有一些进一步的解释可能是有用的

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

要使用Cake的基本异常类,您没有添加

use Cake\Core\Exception\Exception;
在src/Exceptions/DuplicateConfigurationException.php中,用于加载蛋糕异常类构造函数。看

您的代码可以正常工作,因为Cake处理SPL异常的方式与其自身的异常类相同。例如,如果您想进一步使用自定义处理程序,它可能已经破坏了逻辑

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

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

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


有点晚了,但我认为对于其他有同样问题的用户来说,有一些进一步的解释可能会有用

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

要使用Cake的基本异常类,您没有添加

use Cake\Core\Exception\Exception;
在src/Exceptions/DuplicateConfigurationException.php中,用于加载蛋糕异常类构造函数。看

您的代码可以正常工作,因为Cake处理SPL异常的方式与其自身的异常类相同。例如,如果您想进一步使用自定义处理程序,它可能已经破坏了逻辑

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

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

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


链接的问题与将东西放在供应商文件夹中无关,这只是一位经验不足的CakePHP/PHP用户的评论,无意冒犯。除了错误地认为Library在某种程度上是一个保留名称之外,这个问题还说明了应该如何做,名称空间应该是什么样子,以及什么文件夹路径与名称空间PSR-4匹配。我非常抱歉地报告,这个评论不是很有帮助。相关问题既没有给出结论性的解决方案,也描述了一个不起作用的例子。我认为将文件夹重命名为Berry不适合我的需要。它还提供了一个名称空间的示例,该名称空间似乎无法与给定的目录设置结合使用。然而,你给我指出了正确的方向,我终于能够解决它。换句话说,它很有帮助。如前所述,结论是错误的,问题中的示例显示了一个完全有效的PSR-4样式的命名空间/文件夹设置,App\Library\Config与src/Library/Config.php匹配很好,这是一个同样适用于您的方案。链接的问题与将内容放入供应商文件夹无关,这只是一个毫无经验的CakePHP/PHP用户的评论,无意冒犯。除了错误地认为Library在某种程度上是一个保留名称之外,这个问题还说明了应该如何做,名称空间应该是什么样子,以及什么文件夹路径与名称空间PSR-4匹配。我非常抱歉地报告,这个评论不是很有帮助。连环桥
stion既没有给出结论性的解决方案,也没有描述一个不起作用的例子。我认为将文件夹重命名为Berry不适合我的需要。它还提供了一个名称空间的示例,该名称空间似乎无法与给定的目录设置结合使用。然而,你给我指出了正确的方向,我终于能够解决它。换句话说,它很有帮助。如前所述,结论是错误的,问题中的示例显示了一个完全有效的PSR-4样式的名称空间/文件夹设置,App\Library\Config匹配src/Library/Config.php很好,这是同样适用于您的方案。
<?php

namespace App\Exceptions;

use Cake\Core\Exception\Exception;

class DuplicateConfigurationException extends Exception {}

?>