2017-11-16 6 views
1

현재까지 Yii 2에는 컨트롤러 및 모듈 이름의 모호성을 해결하는 기본 방법이 없습니다. 모듈 계층 구조의 예는 내 말을 정확하게 설명하기 :Yii2 : 컨트롤러 및 모듈 이름의 모호성을 해결하는 적절한 방법

app\modules\v1\controllers\UserController는 //은/V1/사용자를 해결하고/V1/사용자/{ID} 행동 app\modules\v1\modules\user\Module.php // 중첩 된 모듈은/V1/사용자 /을 해결합니다. .. 컨트롤러와 그 동작, 예./v1/user/something/{id}

이 경우 UserController는 사용자 모듈과 충돌합니다. 모호성의 주된 이유는 Yii 2 프레임 워크의 단수형 복수 마법입니다. 나는이 모호성을 해결할 적절한 해결책을 찾지 못했습니다. 내 아이디어를 더욱 발전시켜 해결할 수 있습니다.

  1. 모듈의 이름을 변경하십시오.
  2. UserController의 이름을 UsersController로 변경하십시오.
  3. 추가 하위 모듈을 만들고 UserController를 배치하십시오. 예 : app\modules\v1\modules\root\controllers\UserController

적어도 이러한 옵션 중 하나 이상은 Yii 2 철학을 고려해 볼 때 매우 우아하고 적절한 솔루션이라고는 확신하지 못합니다.

주요 질문으로 돌아 가면 Yii 2 철학에서이 문제를 해결하기위한 더 적절한 방법은 무엇입니까? 컨트롤러와 모듈은 다원화 되었든 그렇지 않든 서로 다른 두 가지 유형의 객체이므로 설명 된 사례의 라우팅에서 객체를 분리하는 올바른 방법이어야합니다.

답변

0

대개이 문제는 어떻게 처리 할 것인가에 달려 있습니다.

가정 해보면 users, departments, orders 등이 있습니다. 이 모든 개념에는 모든 상호 작용이 이루어지는 자체 모듈이 있습니다. 이러한 모든 개념에 대한 REST 컨트롤러를 만들려면 모든 모듈에 컨트롤러를 추가하도록 선택하거나 컨트롤러 용 전용 API 모듈을 만들 수 있습니다.

이 목적을 위해 전용 모듈을 만들 때 보통 내부적으로 중첩 된 버전 모듈을 사용하여 API로 지정합니다. 그래서이 상황에서 나는 /api/user이라는 결과를 초래할 수있는 다음 구조 app\modules\api\controllers\UserController을 얻게됩니다. 거기에 모호함이 없으며 이것이 무엇을 의미하는지 꽤 명확합니다.

모듈 자체에 컨트롤러를 추가 할 때 'UserController'보다 나은 이름을 선택합니다. 자신에게 질문 할 때 '이 컨트롤러는 무엇을 수행합니까?/그것은 무엇입니까?' 나는 단지 UserController가 그것을 자르지 않는다는 것을 것을 안다; 특히 User 모듈 내부 일 경우 /user/user이됩니다. 이 컨트롤러는 아마도 User 모듈에있는 하나 이상의 다른 컨트롤러와 함께 존재하게 될 것입니다. 모두 다른 것을 의미합니다. 그래서 대개 ApiController이라는 이름이 붙어 결국 /user/api이됩니다. 다른 컨트롤러는 ProfileController 일 수 있습니다. 따라서 URL을 볼 때 무엇이 ​​/user/api/user/profile인지 명확합니다. 모호함이 없습니다.

+0

답변 해 주셔서 감사합니다. 나는 같은 전략을 선택했다.컨트롤러와 모듈의 이름의 모호성을 피하기 위해 (컨트롤러의 이름이 단수형이지만 루트에서 복수형을 의도 한 경우). 따라서, 이전 게시물의 맥락에서, 나는 복수형으로 컨트롤러를 명명했다. 예제 (Contoller 이름은 UserController에서 UsersController로 바뀌었다) -'app \ modules \ v1 \ controllers \ UsersController' – ReNoM

0

나는 완전히 그 질문을 이해할 수 있을지 모르지만, 아마 classname aliases에 대해 묻고 있습니까?

use My\Full\Classname as Another;