CI 프레임워크 소스 코드 읽기: ControllerController.php
CI 프레임워크 소스 코드 읽기: ControllerController.php
최근 시간이 촉박해 소스코드 읽기 시리즈 업데이트가 조금 늦어졌습니다. Controller에는 상대적으로 코드가 적기 때문에 이 블로그에서는 먼저 이 파일의 소스 코드 분석을 업데이트하겠습니다.
라우팅 및 배포 후 실제 애플리케이션 컨트롤러는 사용자의 모든 요청을 인계받고 사용자 데이터와의 상호 작용을 담당합니다. CI의 모든 애플리케이션 컨트롤러는 CI_Controller의 하위 클래스여야 합니다(CI의 핵심을 확장하지 않는 한 컨트롤러 상위 클래스는 MY_Controller일 수 있음).
애플리케이션 컨트롤러에서는 다음과 같은 코드를 자주 사용합니다.
/* 加载配置文件 */ $this->load->config("config_app"); /* 加载model */ $this->load->model("user"); /* 加载视图 */ $this->load->view("index"); /* 获取post */ $this->input->post("data",true); /* 获取 get */ $this->input->get("data",true); /* 清除xss */ $this->security->xss_clean($data); /* mark时间点 */ $this->benchmark->mark("app_start");
다음은 어떻게 구현되나요?
이 클래스의 구조는 매우 간단하지만 CI_Controller의 클래스 다이어그램을 게시합니다.
1. _construct() 생성자
여기서 CI는 프로세스를 수행하고 로드된 모든 구성 요소를 CI_Controller에 추가합니다(is_loaded 함수가 로드된 모든 구성 요소를 추적하는 것을 이전에 확인했습니다).
foreach (is_loaded() as $var => $class) { $this->$var =& load_class($class); }
컨트롤러가 인스턴스화될 때 is_loaded가 추적하는 구성 요소를 살펴보세요.
이것은 $this->input 및 기타 방법을 통해 CI 구성 요소를 호출할 수 있는 이유를 설명합니다.
이것만으로는 충분하지 않습니다. 로더도 가져오겠습니다.
$this->load =& load_class('Loader', 'core'); $this->load->initialize();
이제 Loader 구성 요소를 사용하여 구성($this->load->config)을 로드하고 모델($this->load->model ) 뷰를 로드하고($this->load->view)
CI_Controller는 여러 구성요소를 보유하는 슈퍼 클래스라고 할 수 있습니다. 이러한 점에서 디자인 패턴의 "에이전트 패턴"과 매우 유사합니다.
2. &get_instance
여기서 간단히 설명하면 CI_Controller는 싱글톤 모드 클래스이며, 이 클래스의 인스턴스는 get_instance() 메서드를 통해 획득됩니다. 이 메소드는 CodeIgniter.php의 get_instance 함수에 의해 호출됩니다:
public static function &get_instance() { return self::$instance; }
다음은 컨트롤러에 대한 몇 가지 힌트입니다.
1. CI의 컨트롤러에서 디렉터리를 사용자 정의할 수 있습니다. 예를 들어, application/controller 디렉터리에 admin 디렉터리를 만들고 새 IndexController를 만듭니다. 그러면 컨트롤러의 URL 액세스 경로는 다음과 같습니다.
test.xq.com/admin/index/
2. 컨트롤러는 너무 많은 로직을 포함해서는 안 되며, 비즈니스 로직은 모델에 캡슐화되어야 합니다.
3. 컨트롤러는 업무에 따라 차별화되어야 합니다. 예를 들어 UserController는 사용자 관련 요청을 처리하고 AppController는 애플리케이션 요청 등을 처리합니다. 이는 원칙이 아니라 방법일 뿐입니다.
4. Controller 클래스 이름은 대문자로 시작해야 하며, 파일 이름은 모두 소문자여야 합니다.
5. 컨트롤러에서 밑줄로 시작하는 메소드는 CI에서 프라이빗 메소드로 간주되어 외부에서 직접 접근할 수 없습니다.
위 내용은 Controller의 전체 내용입니다.
마지막으로 CI_Controller의 소스 코드가 게시됩니다.
class CI_Controller { private static $instance; /** * Constructor */ public function __construct() { self::$instance =& $this; foreach (is_loaded() as $var => $class) { $this->$var =& load_class($class); } $this->load =& load_class('Loader', 'core'); $this->load->initialize(); log_message('debug', "Controller Class Initialized"); } public static function &get_instance() { return self::$instance; } }

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제









많은 사용자들이 스마트 시계를 선택할 때 Huawei 브랜드를 선택하게 됩니다. 그 중 Huawei GT3pro와 GT4가 가장 인기 있는 선택입니다. 두 제품의 차이점을 궁금해하는 사용자가 많습니다. Huawei GT3pro와 GT4의 차이점은 무엇입니까? 1. 외관 GT4: 46mm와 41mm, 재질은 유리 거울 + 스테인레스 스틸 본체 + 고해상도 섬유 후면 쉘입니다. GT3pro: 46.6mm 및 42.9mm, 재질은 사파이어 유리 + 티타늄 본체/세라믹 본체 + 세라믹 백 쉘입니다. 2. 건강한 GT4: 최신 Huawei Truseen5.5+ 알고리즘을 사용하면 결과가 더 정확해집니다. GT3pro: ECG 심전도, 혈관 및 안전성 추가

SpringBoot 초보자가 프로젝트를 생성하면 Controller를 스캔할 수 없고 일련의 문제가 발생합니다. 1.2.3.4.5.6 또 다른 방법은 시작할 때 @ComponentScan(basePackages={"xxx.xxx.xx","xxx.xxx"를 추가하는 것입니다. 서비스 클래스) .xx”})는 여러 SpringBoot 사용자 정의 컨트롤러에 사용할 수 있는 패키지의 정규화된 이름입니다. SpringBoot 사용자 정의 컨트롤러 경로는 시작 클래스와 사용자 정의 컨트롤러 패키지가 다음과 같기 때문에 검색할 수 없으며 찾을 수 없습니다. 같은 디렉토리에 있지 않습니다. 공식적으로 권장되는 application.java 배치

Windows 11에서 캡처 도구가 작동하지 않는 이유 문제의 근본 원인을 이해하면 올바른 솔루션을 찾는 데 도움이 될 수 있습니다. 캡처 도구가 제대로 작동하지 않는 주요 이유는 다음과 같습니다. 초점 도우미가 켜져 있습니다. 이렇게 하면 캡처 도구가 열리지 않습니다. 손상된 응용 프로그램: 캡처 도구가 실행 시 충돌하는 경우 응용 프로그램이 손상되었을 수 있습니다. 오래된 그래픽 드라이버: 호환되지 않는 드라이버가 캡처 도구를 방해할 수 있습니다. 다른 응용 프로그램의 간섭: 실행 중인 다른 응용 프로그램이 캡처 도구와 충돌할 수 있습니다. 인증서가 만료되었습니다. 업그레이드 프로세스 중 오류로 인해 이 문제가 발생할 수 있습니다. 이 문제는 대부분의 사용자에게 적합하며 특별한 기술 지식이 필요하지 않습니다. 1. Windows 및 Microsoft Store 앱 업데이트

서문 어떤 경우에는 서비스 컨트롤러의 접두사가 일관됩니다. 예를 들어 모든 URL의 접두사는 /context-path/api/v1이고 일부 URL에는 통합 접두사를 추가해야 합니다. 가능한 해결책은 서비스의 context-path를 수정하고 api/v1을 context-path에 추가하는 것입니다. 전역 접두사를 수정하면 위의 문제를 해결할 수 있지만 URL에 여러 접두사가 있는 경우 단점이 있습니다. URL에는 접두사가 필요합니다. api/v2인 경우 서비스의 일부 정적 리소스에 api/v1을 추가하지 않으려면 구별할 수 없습니다. 다음은 사용자 정의 주석을 사용하여 특정 URL 접두어를 균일하게 추가합니다. 하나,

1부: 초기 문제 해결 단계 Apple 시스템 상태 확인: 복잡한 솔루션을 살펴보기 전에 기본 사항부터 시작해 보겠습니다. 문제는 귀하의 기기에 있는 것이 아닐 수도 있습니다. Apple 서버가 다운되었을 수도 있습니다. Apple의 시스템 상태 페이지를 방문하여 AppStore가 제대로 작동하는지 확인하세요. 문제가 있는 경우 Apple이 문제를 해결하기를 기다리는 것뿐입니다. 인터넷 연결 확인: "AppStore에 연결할 수 없음" 문제는 때때로 연결 불량으로 인해 발생할 수 있으므로 인터넷 연결이 안정적인지 확인하십시오. Wi-Fi와 모바일 데이터 간을 전환하거나 네트워크 설정을 재설정해 보세요(일반 > 재설정 > 네트워크 설정 재설정 > 설정). iOS 버전을 업데이트하세요.

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

Watch4pro와 gt는 각각 서로 다른 기능과 적용 가능한 시나리오를 가지고 있습니다. 포괄적인 기능, 고성능, 세련된 외관에 중점을 두고 더 높은 가격을 감수할 의향이 있다면 Watch 4 Pro가 더 적합할 수 있습니다. 높은 기능 요구 사항이 없고 배터리 수명과 합리적인 가격에 더 많은 관심을 기울이는 경우 GT 시리즈가 더 적합할 수 있습니다. 최종 선택은 개인의 필요와 예산, 선호도에 따라 결정되어야 합니다. 자신의 필요를 잘 고려한 후 구매하고, 다양한 제품에 대한 리뷰와 비교를 참고하여 보다 현명한 선택을 하는 것이 좋습니다.

PHP 프레임워크를 사용할 때 "PHPFatalerror: Class'Controller'notfound"와 같은 오류가 자주 발생합니다. 이러한 종류의 오류는 일반적으로 프레임워크에서 파일 이름 지정, 위치 또는 로드와 관련이 있으며, 특히 컨트롤러를 사용하려고 할 때 더욱 그렇습니다. 이 기사에서는 이 문제를 해결하기 위한 몇 가지 일반적인 처리 방법을 소개합니다. 파일 위치 확인 먼저 컨트롤러 파일이 프레임워크의 올바른 디렉터리에 있는지 확인해야 합니다. 예를 들어 Laravel 프레임워크를 사용하는 경우
