2016-07-26 3 views
0

저는 PHP에 대한 지식이 아주 적은 Java 개발자입니다. MVC 웹 어플리케이션을 Java로 개발할 때 자주 사용합니다. CodeIgniter 2.1.3을 사용하는 PHP 프로젝트를 작성해야합니다.이 CodeIgniter 컨트롤러 클래스는 정확히 어떻게 작동합니까?

컨트롤러가 작동하는 방식에 대해 약간의 의문이 생깁니다. CodeIgniter.

1) Spring MVC에서 일부 애플릿 메서드가있는 컨트롤러 클래스가 있는데, 각 메서드는 특정 HTTP 요청 (메서드에서 처리하는 URL을 정의하는 주석)을 처리하고 표시해야하는보기의 이름을 반환합니다. https://www.codeigniter.com/userguide3/general/controllers.html#what-is-a-controller

은 그래서 에 CodeIgniter를는 단일 URL을 처리하는 클래스 인 것을 이해하는 것 같다 CodeIgniter의의 공식 문서를 읽기

는이 프레임 워크의 논리는 매우 다르다는 것을 나에게 보인다 클래스 이름과 같은 이름의 응용 프로그램. 맞습니까?

class garanzieValoreFlex extends CI_Controller { 

    ..................................................... 
    ..................................................... 
    ..................................................... 

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

     $this->load->helper(array('form', 'url')); 
     $this->load->library(array('form_validation','session')); 
    } 


    public function reset() { 

     $this->session->unset_userdata("datiPreventivo"); 
     $this->load->view('garanziavalore/garanzie_valore_questionario_bootstrap',array()); 

    } 


    public function index() { 

     $this->load->model('Direct'); 
     $flagDeroga = "true" ; 

     $this->session->userdata("flagDeroga"); 

     $data = $this->session->userdata("datiPreventivo"); 
     $this->load->model('GaranzieValoreFlexModel'); 

     $data = $this->session->userdata("datiPreventivo"); 
     $this->load->model('GaranzieValoreFlexModel'); 

     $this->load->view('garanziavalore/index_bootstrap',$data); 
    } 

    public function back() { 

     $this->load->model('Direct'); 
     $flagDeroga = "true" ; 

     $this->session->userdata("flagDeroga"); 
      $data = $this->session->userdata("datiPreventivo"); 
      $this->load->model('GaranzieValoreFlexModel'); 
      //$this->load->view('garanziavalore/garanzie_valore_questionario_bootstrap',$data); 
      $this->load->view('garanziavalore/index_tornaIndietro_bootstrap',$data); 

    } 


    ..................................................... 
    ..................................................... 
    ..................................................... 

} 

그래서,이 URL을 향한 기본적으로이 컨트롤러 핸들에만 HTTP 요청, 이해가 무엇에서 : http://MYURL/garanzieValoreFlex

는 그래서이 클래스가 있습니다.

그래서에서 나는 이전 URL에 액세스 할 때 수행 방법이 선으로하는 지수() 이해 무엇을 :

$this->load->view('garanziavalore/index_bootstrap',$data); 

garanziavalore/index_bootstrap.php 페이지를 표시하는 나는 디렉토리 내 prohect의 조회수 (가 전망에 디렉토리해야하는 표준입니다?)

가 내 추론인가에 발견 옳은?

그렇다면 나는 ID로 통과 뷰를로드하고 또한 $ I 페이지에 표시 할 수있는 데이터를 포함하는 모델이라고 생각 변수는,이 변수에 의해 검색된 데이터 :

$data = $this->session->userdata("datiPreventivo"); 

이 라인은 정확히 무엇입니까?

마지막으로 의심의 여지는 다시 다른 을 관련() 나는 이전 컨트롤러에서 발견 방법은 완전히 사용자 정의하기 전에이 응용 프로그램 작업을 개발자가 정의 CodeIgniter의 CI_Controller 클래스 또는 무언가의 방법이다 나를?

답변

1

컨트롤러가 둘 이상의 URL을 처리 할 수 ​​있으며 클래스 garanzieValoreFlex이 그러한 클래스의 예입니다.

URL http://MYURL/garanzieValoreFlexindex 메서드를 호출합니다.

URL http://MYURL/garanzieValoreFlex/backhttp://MYURL/garanzieValoreFlex/reset은 각각 back()reset() 클래스의 메소드를 호출합니다. 이 두 함수는 확장 클래스 CI_Controller에 사용자 정의 추가 사항입니다.

코드 식별 기호 (CI)는 패턴을 따릅니다. example.com/class/function/argument/ 함수 및 인수 세그먼트는 선택 사항입니다.

URL이 example.com/class과 같은 클래스 이름 만 사용하는 경우 CI는 index() 메서드가 있는지 찾아서 호출합니다. index()이 없으면 404 Page Not Found이 표시됩니다.

$this->load->view('garanziavalore/index_bootstrap',$data);에 대한 귀하의 추론은 정확합니다. 이러한 파일을 보기 디렉토리에 두는 것이 표준입니다. 선택적으로 서브 디렉토리보기는 /views/garanziavalore/에서와 같이 사용할 수 있습니다.

CI는 다른 클래스 (라이브러리)를 특정 경로와 연결하는 파일 구조를 사용합니다. 컨트롤러, 모델 및 뷰 클래스는 각각의 폴더에 저장됩니다. 그런 다음 loader 클래스는 클래스의 주어진 "유형"을 찾기 시작할 위치를 정확히 알 수 있습니다. 예를 들어 $this->load->view('garanziavalore/index_bootstrap',$data);을 호출하면 파일을 loader 클래스에 전달하고 /application/views/garanzivalore/ 디렉토리에 전달합니다. 코드 $this->load->model('GaranzieValoreFlexModel');은 로더에게 파일을 /application/models/에 사용하라고 지시합니다. 코드

$data = $this->session->userdata("datiPreventivo"); 

loader 클래스 here.

라인의

찾기 문서는 session 클래스 (라이브러리)의 userdata 메소드를 호출한다. 세션 데이터를 배열로 생각하십시오. 이 방법으로 배열이 정의 된 경우. (이것은 수행되는 것에 대한 의사 코드 일뿐입니다).

$userdata = array(); //empty array structure 

$this->session->userdata("datiPreventivo")$userdata["datiPreventivo"]의 값을 리턴 유효 호.

1

추론이 잘못되었습니다.난 정말 당신이 이해 할 수 있도록 MVC가 어떻게 작동하는지 당신이 공식 CodeIgniter의 자습서를 읽는 것이 좋습니다 : http://www.codeigniter.com/userguide2/

CodeIgniter를 3 : http://www.codeigniter.com/user_guide/

CI 컨트롤러 는 아래의 링크를

CodeIgniter는 2입니다 다른 URL을 처리합니다. 컨트롤러에 index라는 함수를 만들면 컨트롤러에 액세스 할 때 자동으로로드됩니다. 귀하의 경우에는 http://MYURL/garanzieValoreFlex이 기능에 액세스해야합니다. 다른 기능에 액세스하려면 http://MYURL/garanzieValoreFlex/**MyFunction** (Read more http://www.codeigniter.com/user_guide/general/urls.html?highlight=url#codeigniter-urls) 백 기능은 사용자 정의 기능입니다.