CI 묻고 답하기

제목 컨트롤러에서 모델 인스턴스를 동적으로 로드하고싶습니다
카테고리 CI 4 관련
글쓴이 dg_dong 작성시각 2022/01/19 17:52:26
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 6695   RSS

접속 URL

EX) http://localhost/user/top

http://localhost/user/center

http://localhost/user/bottom

 

Routes.php


EX) 
$routes->group('user',function($routes){    
    $routes->get('(:segment)'   ,'Api\User::search/$1');}
);

접속한 segment를 활용해 new TopModel , new CenterModel ,new BottomModel 모델 인스턴스를 동적으로 만들수있는 방법이 있을까요?

Top , Center , Bottom 이 부분을 segment값으로 대체하고 싶습니다

 

현재는 switch문으로 분기해서 작업 했습니다

switch($cd){
            case 'Top' : 
                $model = new TopModel;
                break;
            case 'Center' :
                $model = new CenterModel;
                break;
            case 'Bottom' : 
                $model = new BottonModel;
                break;
        }
        return $this->setResponseFormat('json')->respond([$model->findAll()]);

 

 다음글 Docker기반 환경에서 CI4와 DB 접속이 안되는 ... (2)
 이전글 ci zip 문의 (1)

댓글

츠츤츤 / 2022/01/20 10:03:20 / 추천 0
저도 궁금합니다. 그리고 ci3에서는 모델에 함수를 만들고 값을 넘겨 분기처리를 하였는데요. ci4에선 db table 별로 모델클래스를 새로 만들고 컨트롤 단에서 분기처리해야하는지 궁금합니다.
한대승(불의회상) / 2022/01/20 11:11:15 / 추천 0
$modelName = $cd.'Model';
$model = new $modelName;
테러보이 / 2022/01/20 13:15:16 / 추천 0

가정 윗줄에 use로 모델은 불러오셨을거고 

그렇다면 다음과 같은 코드가 되야겠지요.

switch($cd){
    case 'top' :
        $model = new TopModel();
        break;
    case 'center' :
        $model = new CenterModel();
        break;
    case 'bottom' :
        $model = new BottonModel();
        break;
}
return $this->setResponseFormat('json')->respond([$model->findAll()]);