2017-02-17 2 views
0

CakePhp 응용 프로그램에서 사용자 정의 예외 클래스를 생성하고 사용하고 싶습니다. Cakephp3에 사용자 정의 예외가 없습니다.

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

} ?> 

가 나는 예외를 제기하고자하는 컨트롤러가, 내가

use Cake\Exception\DuplicateConfigurationException; 

및 함수 I 내에서 추가 :

그래서 나는 다음 클래스 골격으로 DuplicateConfigurationException.php을 생성 전화

throw new DuplicateConfigurationException(); 

interwebs 전체에 대한 제안에 이어 나는 오 다음 위치에있는 PHP 파일을 배치,하지만 그들 중 어느 것도 작동하는 것 같다 :

SRC/예외 SRC/예외 SRC/lib 디렉토리 SRC/lib 디렉토리/오류 SRC/lib 디렉토리/에러/예외

난 항상 오류가 발생

:

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

다른 내가 케이크 내 사용자 정의 예외를 인정하기 위해 어떻게해야합니까?

나는 Loading custom class in CakePHP3을 잘 알고 있지만,이 예외는 별도의 라이브러리가 아니기 때문에 공급 업체 내에 배치하지 않을 것입니까? SRC/예외에

/DuplicateConfigurationException.php

을 컨트롤러에서 :

+0

링크 된 질문, 즉 다소 미경 CakePHP의/PHP 사용자 (악의)에서 불과 주석이 있던'vendor' 폴더에 물건을 배치 함께 할 수 없다 . 라이브러리가 어떻게 든 예약 된 이름이라는 잘못된 결론 외에도, 질문은 어떻게해야하는지, 네임 스페이스가 어떻게 보이는지, 어떤 폴더 경로가 네임 스페이스 (PSR-4)와 일치 하는지를 보여줍니다. – ndm

+0

이 말은별로 도움이되지 않았다는 사실을보고해서 죄송합니다. 링크 된 질문은 결정적인 해결책을 제시하지 못합니다 (오히려 작동하지 않는 예제를 묘사 함). 나는 Berry로 폴더 이름을 바꾸는 것이 나의 요구에 어울리지 않을 것이라고 생각한다. 또한 주어진 디렉토리 설정과 함께 작동하지 않는 네임 스페이스의 예를 제공합니다. 그러나, 당신은 올바른 방향으로 나를 찔렀다, 마침내 그것을 해결할 수있었습니다. –

+0

다른 말로하면, 그것은 충분히 도움이되었습니다. 앞에서 언급했듯이 결론은 틀렸고 질문에있는 예제는 완벽하게 유효한 PSR-4 스타일 네임 스페이스/폴더 설정을 보여 주며'App \ Library \ Config'는'src/Library/Config.php'와 정확히 일치합니다. 당신을 위해 일하는 계획. – ndm

답변

1

조금 늦었지만 같은 질문을 가진 다른 사용자가 몇 가지 추가 설명이 필요하다고 생각합니다.

실제로 솔루션을 사용하면 전역 네임 스페이스에있는 네이티브 PHP SPL Exception 클래스를 사용하게됩니다.

는 케이크의 기본 Exception 클래스를 사용하려면로드 케이크 예외 클래스 생성자에 대한 src/Exceptions/DuplicateConfigurationException.php

use Cake\Core\Exception\Exception; 

을 추가 놓쳤다.Cake's book

Cake는 자체 예외 클래스와 동일한 방식으로 SPL 예외를 처리하기 때문에 코드가 작동합니다. 예를 들어 사용자 정의 처리기를 사용하여 추가 작업을하고 싶다면 논리가 손상되었을 수 있습니다.

class IniPermissionsException extends \Cake\Core\Exception\Exception {};도 작동합니다. 이 경우 전체 네임 스페이스 경로를 제공해야하므로 extends 문에서 클래스를 호출 할 때 \를 루트 네임 스페이스로 미리 지정해야합니다.

케이크의 네임 스페이스에서 돌고래처럼 수영하려면 API reference으로 가십시오. src/Exceptions/DuplicateConfigurationException.php에 대한

전체 업데이트 된 코드 :

<?php 

namespace App\Exceptions; 

use Cake\Core\Exception\Exception; 

class DuplicateConfigurationException extends Exception {} 

?> 
0

좋아, 일부 손보는 후 나는 그것이 작동 얻을 관리

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

분명히 네임 스페이스가해야 응용 프로그램 \ < 폴더 > 및 응용 프로그램 \ < 폴더 > \ < Classn 각각 >입니다. http://www.php.net/manual/en/language.namespaces.global.php

아직도 내가 CakePHP의 3에 대한 네임 스페이스 규칙이 설명되어 있습니다 어디에 확실하지 않다 :

와 나는 그것이 네임 스페이스 문맥에서 사용되기 때문에, 백 슬래시로 예외를 앞에 추가했다.