2012-03-24 4 views
5

이 난 코어/CodeIgniter.php에이 댓글의 아이디어에서 Code Igniter Controller/Model name conflictsCodeIgniter는 컨트롤러와 모델

발견 클래스 이름 변수를 뭔가를 시도
$class = 'Controller' . $RTR->fetch_class();

class ControllerUser extends CI_Controller { ...

:

이제 컨트롤러 이름을 변경

이제 사용자 모델과 사용자 컨트롤러를 사용할 수 있습니다. 하지만 제 질문은, 이해가 되니? 또는 문제가 있습니까? (미안, 내 나쁜 영어)

+0

이 때문에 PHP5.3 [네임 스페이스] (http://php.net/manual/en/language.namespaces.php)로 작업 할 수있는 프레임 워크를 찾아야합니다. 그 프레임 워크를 싫어하는만큼, FuelPHP가 당신을위한 논리적 인 단계 일 수 있습니다. 그 아주 새로운 CI 포크. 물론, 프레임 워크가 사용되거나 프레임 워크가 가능할 때까지 제어 할 수 있다면 그렇습니다. 그렇지 않다면 다음 프로젝트를 선택할 때 고려하십시오. –

+0

FuelPHP에서 어디서 아이디어를 얻을 수 있는지 모르겠다. CI 포크입니다. 그것은 처음부터 만들어졌으며 CI와 공통점이 없으며 호환되지 않습니다. – WanWizard

답변

5

이 문제를 해결하기 위해, 일반적으로 대부분의 사람들은 내가 그들이 거의 자신의 클래스에 의해 참조되지 않습니다 때문에, 대신 컨트롤러에 접미어를 추가하는 것이 좋습니다 생각

모델 클래스 이름에 '_model'접미사를 추가 코드의 이름.

먼저 라우터 클래스를 확장해야합니다. "응용 프로그램/라이브러리/MY_Router.php"

class MY_Router extends CI_Router { 
    var $suffix = '_controller'; 

    function __construct() { 
     parent::CI_Router(); 
    } 

    function set_class($class) { 
     $this->class = $class . $this->suffix; 
    } 

    function controller_name() { 

     if (strstr($this->class, $this->suffix)) { 
      return str_replace($this->suffix, '', $this->class); 
     } 
     else { 
      return $this->class; 
     } 

    } 
} 

이제 편집 "시스템/CodeIgniter의/CodeIgniter.php"

라인 (153) :

if (! file_exists(APPPATH.'controllers/'.$RTR->fetch_directory().$RTR->controller_name().EXT)) 

라인

이 파일을 만듭니다 158 :

include(APPPATH.'controllers/'.$RTR->fetch_directory().$RTR->controller_name().EXT); 

다음, 편집 : "시스템/라이브러리/Profiler.php", 323 :

$output .= " 
<div style="color:#995300;font-weight:normal;padding:4px 0 4px 0">".$this->CI->router->controller_name()."/".$this->CI->router->fetch_method()."</div>"; 

Source

+0

목록의 엄격하게 말한 속성입니다. 404 찾을 수 없음. – musa

+0

@musa, 그게 hmvc 솔루션과 함께 있었는데, 내 편집을 확인하고 – Starx

+0

을 부모가 : __ construct()하지 말아야합니까? PHP5 이후로 당신이 어떻게 구조를 수행하는지에 변화가있었습니다 ... 그렇다면 CI는 여전히 semi-php4 프레임 워크입니다. –

1

그래,이게 무슨 말인지. Codeigniter는 엄격한 객체 지향 프레임 워크입니다. 즉, 이름이 같은 두 개 이상의 객체가있을 때 객체의 이름이 고유하지 않습니다.

모델은 데이터 프로세서이고 컨트롤러는보기를 모델에 연결하는 클래스입니다. 그래서 논리적으로 당신은이 같은 이름을 지정해야합니다 :

귀하의 모델이 될 것 "Model_User", "DB_USER"또는 "UserList에"

컨트롤러가 될 것입니다 : "사용자", Controller_User 또는 UserController

모델의 경우 Db_User (짧은 이름이지만 명확한 이름)를 사용하고 컨트롤러의 경우 "사용자"(해당 사용자의 모델 및 뷰와 결합 할 때 사용자를 정의하는 클래스)를 사용하는 것이 좋습니다

내 Codeigniter 시스템을 이처럼 사용하는 데 전혀 문제가 없습니다.

+0

나는 목록이나 테이블에 대해 말하기 때문에 복수형을 사용하지 않습니다. 예를 들어, 사용자는 목록 –

7

내가 CodeIgniter의의 핵심을 수정하지 않을 것입니다. 업그레이드하면 그 변화가 느슨해집니다.

나는 과거에 두 가지 일을했습니다 : 1. 내 모델 이름 User_model 2. 내 컨트롤러를 복수형으로, 내 모델을 단수로 지정했습니다.

나는 지금 후자를한다. 컨트롤러 이름이 URL에 있으므로 경로가 app_path/users/username처럼 보이기 때문에 의미 상으로 의미가 있습니다. 또한 모델은 대개 단일 사용자를 모델링하므로 이해하기가 쉽습니다. 왜 그냥 단수 당신의 컨트롤러를 확인하고 모델/DB 테이블 복수 해달라고 http://codeigniter.uservoice.com/forums/40508-codeigniter-reactor/suggestions/1269847-controller-prefixes

+0

datamapper를 사용하고 있으므로 User_model을 만들고 싶지 않습니다. 하지만 예, 모델 사용자, 컨트롤러 사용자 수 있습니다. 또한 http://phpfour.com/blog/2009/09/codeigniter-controller-naming-convention-modified/이게 무엇을 생각합니까? – musa

+0

까지 # 2가 간다, 지금까지는 의미가 있으며, 나는 이것이 좀 더 SEO 친근하다고 생각하지만 그것에 대한 더 많은 참고 자료를 얻고 싶습니다. – Jahmic

1

:

또한 여기이 질문에 대한 사회의 논의를 따를 수 있는가?