2014-11-28 3 views
0

"CakePHP"에서는 하나의 모델이 각 컨트롤러에 대해 사용되지만 단일 컨트롤러에 여러 함수가 있고 각 함수는 서로 다른 페이지와 데이터베이스 테이블을 나타냅니다. 즉CakePHP의 단일 컨트롤러에서 여러 함수에 대해 여러 모델을 만드는 방법

public function manage_categories(){} 
public function manage_sub_categories(){} 

2 위의 기능을 관리 컨트롤러에 있지만 이제 문제는 데이터베이스를 표현하기 위해 각 기능에 대한 모델을 만드는 방법입니다. 각 함수는 데이터베이스에서 고유 한 속성을가집니다. 컨트롤러 이름 "admin"과 모델 이름이 같아야하거나이 이름이 함수 이름과 동일해야합니다. 정상적인 상황에서는 모델 이름이 컨트롤러 이름과 동일합니다.

"Users"모델 이름은 "UsersController"에 대해 사용됩니다. 친절하게 상기 한 문제를 해결합니다. 나는 그것을 해결하기 위해 충분히 노력했다. 미리 감사드립니다.

+0

정확한 CakePHP 버전을 사용하고 있습니까? ** 항상 ** 정확한 버전을 지정하십시오! – burzum

+0

cakephp 2.5.5 버전 – user3623305

+0

을 사용하고 있습니다. 좋은 해결책을 제안 하시겠습니까? 아니면 버전을 묻는 것입니까? – user3623305

답변

1

두 개의 데이터베이스 테이블이있는 경우 SoC은 하나의 컨트롤러에 동일한 도메인에 속하지 않은 많은 것들을 던지기보다는 두 개의 컨트롤러를 갖는 것이 가장 바람직합니다. 당신은 단지 관련 모델의 데이터의 일부를 사용하고자 할 때

때때로 당신은 협회를 통해 액세스 할 수 있습니다 또한

$this->Model->SubModel->foo(); 

당신이 작동하지만, 아주 좋지 않은 관리자 컨트롤러가 말한다 접근. 대신 CakePHP는 prefix routing을 특징으로합니다. 따라서/admin/categories/some_action과 같이 접근되는 액션은 CategoriesController some_action() 액션으로 라우팅됩니다.

"사용자"모델 이름이 컨벤션 모델로,

잘못인가 "UsersController"에 대한 사용은 복수, 단수하지 이름을 지정해야합니다. 사용자 모델을 찾고 있기 때문에 UsersController는 Users 모델을 찾지 않습니다.

Model :: query()에서 벗어나 가능한 한 많이 ORM을 사용하십시오.

public function manage_categories(){} 
public function manage_sub_categories(){} 

이 될해야 :

class CategoriesController extends AppController { 
    public function admin_index() { /*...*/ } 
} 
class SubCategoriesController extends AppController { 
    public function admin_index() { /*...*/ } 
} 

그러나 하위 범주를 가정 내가 두 번째 모델 또는 모든 두 번째 컨트롤러의 필요성이 표시되지 않는 같은 테이블 범주에 속한다.

+0

"스포츠"가 카테고리이고 귀뚜라미, 축구, 하키, 수만, 배구 등이 스포츠의 하위 카테고리라고 가정합니다. 그럼 난 다른 테이블을 하나의 테이블과 하위의 하위 범주에 다른 저장해야한다고 가정합니다. 당신은 그렇게 생각하지 않는다. 이렇게하면 데이터베이스에 데이터를 저장하는 것이 좋은 방법 일까? – user3623305

+0

아니요, "parent child"또는 "nested sets"를 사용하십시오. 카테고리 트리에 대해 두 개의 테이블을 가질 필요가 없습니다. CakePHP TreeBehavior를 확인하면 트리 구조를 구현하는 데 도움이됩니다. CakeDC에서 만든 Categories 플러그인도 있습니다. – burzum

+0

정말 큰 도움이됩니다. – user3623305