FuelPHP-퀵 가이드
FuelPHP는 오픈 소스 웹 애플리케이션 프레임 워크입니다. PHP 5.3으로 작성되었으며 HMVC 패턴을 구현합니다.HMVC 이다 Hierarchical Model-View-Controller framework 일반 MVC에서와 같이 전체 페이지 대신 댓글, 메뉴 등의 부분 페이지를 반환하는 컨트롤러를 하위 요청하도록 허용합니다.
FuelPHP는 다음과 같은 프레임 워크의 모범 사례를 통합하려는 열망으로 만들어졌습니다. CodeIgniter 과 Kohana개선과 자체 아이디어로. FuelPHP 데이터베이스 마이그레이션 도구 및 스캐 폴딩 기능은 인기있는Ruby on Rails 뼈대.
FuelPHP는 power of command line 라는 유틸리티를 통해 "Oil". 이 유틸리티는 개발 속도를 높이고 효율성을 높이고 테스트, 디버깅 및 HTML 지원을 지원하도록 설계되었습니다.
FuelPHP는 순전히 객체 지향 접근 방식입니다. 아키텍처는 모듈화 개념을 기반으로합니다. 응용 프로그램은 모듈로 나눌 수 있으며 모든 구성 요소는 한 줄의 코드를 다시 작성하지 않고도 확장하거나 교체 할 수 있습니다. Fuel은 다음과 같은 모든 템플릿 파서를 지원합니다.Smarty, Twig, PHPTal, 등을 파싱 뷰.
FuelPHP community is large300 명이 넘는 기여자와 함께 활동하고 있습니다. 대규모 커뮤니티는 정기적으로 패키지 및 확장을 만들고 개선합니다. FuelPHP 프레임 워크의 주요 목적은 유연성과 호환성을 제공하는 것입니다. 빠르고 배우기 쉬우 며 웹 애플리케이션 개발을위한 완벽한 솔루션입니다.
FuelPHP를 PHP 개발자들이 사용하는 최고의 프레임 워크 중 하나로 만드는 이유는 new version of FuelPHP is reverse-compatible with its older versions안정적인 API 때문입니다. 매우 유연합니다.
Packages and modules체계적인 방식으로 기존 코드를 쉽고 간단하게 재사용 할 수 있습니다. FuelPHP는 작은 라이브러리를 통해 최대 성능을 제공합니다. 대화 형 디버깅을 통해 개발 오류를 쉽게 제거 할 수 있습니다. 또한 깔끔하고 안정적인 코드는 프로그래밍을 더 쉽게 만듭니다.
FuelPHP-기능
FuelPHP는 본격적인 웹 애플리케이션을 만들기 위해 많은 기능을 제공합니다. 유연한 구성 요소, 간단한 구성, 사용하기 쉬운 ORM, REST 기반 애플리케이션 개발 모드 등을 제공합니다. 다음은 몇 가지 두드러진 기능입니다.
- 유연하고 커뮤니티 중심의 웹 프레임 워크
- 간편한 구성 및 사용
- FuelPHP는 휴대 성이 뛰어나 거의 모든 서버에서 작동합니다.
- 유연한 URI 라우팅 시스템
- FuelPHP는 RESTful API 개발 지원을 제공합니다
- 경량 ORM 모델
- 입력 필터링 및 SQL 주입 방지
- 안전한 인증 및 권한 부여 프레임 워크
- 재사용 가능하고 유지하기 쉬운 코드
- 클래스 자동 로딩, 세션 관리 및 예외 처리.
FuelPHP-장점
FuelPHP는 우아한 HMVC PHP 5.3 프레임 워크로 다음과 같은 장점이있는 웹 애플리케이션 구축을위한 구성 요소 세트를 제공합니다.
Modular structure− 연료는 모듈이나 HMVC 파일 구조를 사용하도록 강요하지 않습니다. 사용하려는 경우 프로세스를 통합하기가 매우 쉽습니다. FuelPHP 앱은 모듈 식 구조로 만들어졌으며 명확한 이점을 가진 개발자가 더 쉽게 사용할 수 있습니다.
HMVC pattern −이 프레임 워크의 가장 중요한 기능은 HMVC (Hierarchical Model View Controller)로 모든 속성, 클래스 메서드, 함수, 파일을 상위 수준에서 쉽게 액세스하거나 사용할 수 있습니다.
Secure hashing function− FuelPHP는 강력한 암호화 도구와 암호 해싱 기술을 지원합니다. 강력한 PHPSecLib를 사용하여 암호화, 암호 해독 및 해싱을 처리합니다.
Scaffolding functionality− 스캐 폴딩은 데이터베이스 운영을 구축하기위한 메타 프로그래밍 방법입니다. 연료의 비계는 매우 쉽습니다. 매우 간단한 단계로 기본 CRUD 애플리케이션을 얻을 수 있습니다.
다음 인기 제품은 FuelPHP 프레임 워크를 사용합니다-
Matic Technology− 해외 맞춤형 소프트웨어 개발 솔루션의 글로벌 제공 업체. Matic Technologies에서는 고객의 요구 사항에 따라 FuelPHP를 통해 가능한 모든 최상의 솔루션을 제공합니다.
Kroobe− Kroobe는 소셜 네트워킹 광고 회사입니다. Fuel은 효율적인 솔루션을 달성하기 위해 Kroobe 팀에 매우 낮은 개발 비용과 서비스를 제공합니다.
이 장에서는 기계에 FuelPHP 프레임 워크를 설치하는 방법을 설명합니다. FuelPHP 설치는 매우 간단하고 쉽습니다. FuelPHP 응용 프로그램을 만드는 데는 두 가지 방법이 있습니다.
첫 번째 방법은 Command line FuelPHP 도구를 사용하여 설치 Oil.
두 번째 방법은 Composer based설치. FuelPHP 사용Composer, 설치 및 패키지 종속성 모두에 대해 프로세스를 계속하기 전에 작성기가 로컬로 설치되어 있는지 확인하십시오.
다음 섹션에서 각 방법을 하나씩 자세히 살펴 보겠습니다.
시스템 요구 사항
설치로 이동하기 전에 다음 시스템 요구 사항을 충족해야합니다.
웹 서버 (다음 중 하나)
- WAMP (Windows)
- Microsoft IIS (Windows)
- LAMP (Linux)
- MAMP (Macintosh)
- XAMP (다중 플랫폼)
- Nginx (다중 플랫폼)
- PHP 내장 개발 웹 서버 (멀티 플랫폼)
브라우저 지원 (다음 중 하나)
- IE (Internet Explorer 8 이상)
- Firefox
- 구글 크롬
- Safari
PHP compatibility− PHP 5.3 이상. 최대한의 이점을 얻으려면 최신 버전을 사용하십시오.
이 튜토리얼에서는 PHP의 내장 개발 웹 서버를 사용하겠습니다. 내장 된 개발 웹 서버는 시작하기 쉬울뿐만 아니라 웹 서버 및 구성 세계의 복잡성에 빠지지 않고도 FuelPHP 웹 애플리케이션의 기본 사항을 이해하는 데 매우 적합합니다.
명령 줄 설치
FuelPHP의 명령 줄 설치는 매우 쉽고 최대 5 분이 소요됩니다.
오일 패키지 설치
Oil은 FuelPHP 프레임 워크에서 제공하는 특수 패키지 / 명령으로, 애플리케이션 설치, 개발 및 테스트를 포함하여 FuelPHP 애플리케이션 개발에 필요한 많은 작업을 수행합니다.
설치하려면 Oil 패키지, 쉘을 열고 다음 명령을 실행하십시오-
sudo curl https://get.fuelphp.com/oil | sh
이 명령은 curl을 사용하여 오일 패키지를 다운로드하고 설치합니다. 명령은 다음 정보와 유사한 결과를 표시하고 마지막으로 오일 패키지를 설치합니다.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 479 100 479 0 0 353 0 0:00:01 0:00:01 --:--:-- 353
새 프로젝트 생성
Oil을 사용하여 새 프로젝트를 생성하려면 다음 명령을 사용하십시오.
oil create <project_name>
다음 명령을 사용하여“HelloWorld”라는 새 프로젝트를 만들어 보겠습니다.
oil create HelloWorld
이제 다음과 유사한 응답을 볼 수 있으며 마지막으로 간단한 스켈레톤 FuelPHP 애플리케이션을 생성 할 수 있습니다.
composer create-project fuel/fuel HelloWorld
Installing fuel/fuel (1.8.0.1)
- Installing fuel/fuel (1.8.0.1)
Loading from cache
Created project in HelloWorld
Loading composer repositories with package information
Updating dependencies (including require-dev)
- Installing composer/installers (v1.3.0)
Loading from cache
- Installing fuelphp/upload (2.0.6)
Loading from cache
- Installing michelf/php-markdown (1.4.0)
Loading from cache
- Installing psr/log (1.0.2)
Loading from cache
- Installing monolog/monolog (1.18.2)
Loading from cache
- Installing phpseclib/phpseclib (2.0.0)
Loading from cache
- Installing fuel/core (1.8.0.4)
Loading from cache
- Installing fuel/auth (1.8.0.4)
Loading from cache
- Installing fuel/email (1.8.0.4)
Loading from cache
- Installing fuel/oil (1.8.0.4)
Loading from cache
- Installing fuel/orm (1.8.0.1)
Loading from cache
- Installing fuel/parser (1.8.0.4)
Loading from cache
- Installing fuel/docs (1.8.0.4)
Loading from cache
…………….
…………….
Writing lock file
Generating autoload files
오일 버전
오일 사용 가능 여부를 테스트하고 버전을 확인하려면 다음 명령을 사용하십시오.
$ cd HelloWorld $ php oil -v
위의 명령은 다음 결과를 생성합니다-
Fuel: 1.8 running in "development" mode
오일 도움말 명령
Oil의 기본 도움말 문서를 얻으려면 다음 명령을 사용하십시오.
$ php oil help
위의 명령은 다음 결과와 유사한 도움말 문서를 표시합니다.
Usage:
php oil [cell|console|generate|package|refine|help|server|test]
Runtime options:
-f, [--force] # Overwrite files that already exist
-s, [--skip] # Skip files that already exist
-q, [--quiet] # Supress status output
-t, [--speak] # Speak errors in a robot voice
Description:
The 'oil' command can be used in several ways to facilitate quick development, help
with testing your application and for running Tasks.
Environment:
If you want to specify a specific environment oil has to run in, overload the
environment variable on the commandline: FUEL_ENV=staging php oil <commands>
More information:
You can pass the parameter "help" to each of the defined command to get
information about that specific command: php oil package help
Documentation:
http://docs.fuelphp.com/packages/oil/intro.html
지금까지 오일을 사용하여 연료를 설치하는 방법에 대한 아이디어가 있습니다. 다음 섹션에서 작곡가 기반 설치를 살펴 보겠습니다.
Composer 기반 설치
다음 명령은 Composer를 사용하여 FuelPHP를 설치하는 데 사용됩니다.
$ composer create-project fuel/fuel --prefer-dist.
Git 리포지토리 클론
최신 개발 버전을 로컬 git 저장소 복제본으로 설치하려면 다음 명령을 사용하십시오.
$ composer create-project fuel/fuel:dev-1.9/develop --prefer-source.
응용 프로그램 실행
프로젝트 디렉터리 공용 폴더로 이동하고 다음 명령으로 프로덕션 서버를 사용하여 애플리케이션을 실행합니다.
$ cd path/to/HelloWorld/public
$ php -S localhost:8080 index.php
다음과 같은 응답을 생성합니다.
PHP 5.5.31 Development Server started at Sun May 21 12:26:10 2017
Listening on http://localhost:8080
Document root is /Users/workspace/php-fuel/HelloWorld/public
Press Ctrl-C to quit.
이제 URL을 요청하고 http://localhost:8080 다음 결과가 생성됩니다.
결과
이것은 개발 환경에서 FuelPHP 애플리케이션을 실행하는 가장 간단한 방법입니다. 프로덕션 환경에서 이러한 방식으로 애플리케이션을 생성하면 보안 문제에 직면하게됩니다. 권장되는 방법은 가상 호스트 구성을 설정하는 것입니다. 다음 섹션에서 Apache 웹 서버에 대해 설명합니다.
가상 호스트 설정
FuelPHP 응용 프로그램에 액세스하는 더 안전한 방법입니다. 가상 호스트를 설정하려면 아파치 가상 호스트 파일을 애플리케이션에 연결해야합니다. 인트라넷 응용 프로그램의 경우 시스템 호스트 파일 URL을 가상 호스트로 리디렉션합니다.
가상 호스트 파일
가상 호스트를 열고 다음 변경 사항을 추가하십시오.
<VirtualHost *:80>
ServerName hello.app
DocumentRoot /path/to/public
SetEnv FUEL_ENV “development”
<Directory /path/to/public>
DirectoryIndex index.php
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
시스템 호스트 파일
이제 다음 명령을 사용하여 시스템에 호스트 항목을 추가하십시오.
sudo vi /etc/hosts
그런 다음 파일 끝에 다음 줄을 추가합니다.
127.0.0.1 hello.app
모든 변경 사항을 사용하려면 Apache 서버를 다시 시작하고 URL을 요청하십시오. http://hello.app. FuelPHP 홈페이지를 생성합니다.
FuelPHP는 전투 테스트를 기반으로합니다 Model-View-Controller 건축과 함께 HMVC (Hierarchical MVC)지원하다. MVC는 유연하고 계층화 된 애플리케이션 개발을 제공하지만 HMVC는 웹 애플리케이션의 위젯 화를 가능하게하기 위해 한 단계 더 나아갑니다.
FuelPHP의 강점은 애플리케이션을 개발하는 특정 방법을 강요하지 않는다는 것입니다. 간단하고 사용하기 쉬운 표준 구조를 제공합니다. 개발자는 FuelPHP에서 제공하는 미리 정의 된 기능 세트를 자유롭게 사용하거나 필요할 때마다 수정할 수 있습니다. 핵심 기능을 포함하여 FuelPHP에서 제공하는 모든 기능은 응용 프로그램의 요구 사항에 따라 변경 될 수 있습니다.
모델
모델은 응용 프로그램의 비즈니스 항목입니다. Controller와 View는 Model 형태로 데이터를 교환합니다. 모델을 통해 비즈니스 데이터를 일관되게 표현할 수 있습니다. 이를 통해 데이터베이스 계층이 표준 방식으로 웹 애플리케이션 계층과 상호 작용할 수 있으며 데이터베이스 엔터티를 선택, 저장, 편집 및 삭제할 수있는 옵션을 제공합니다.
제어 장치
일반적인 MVC 애플리케이션은 컨트롤러에서 시작됩니다. 사용자가 FuelPHP 웹 애플리케이션에 요청을 보내면 애플리케이션은 요청에 대한 모든 정보를 수집하여 컨트롤러에 보냅니다. Controller는 요청 된 페이지의 필수 비즈니스 로직을 수행 한 다음 Model의 형태로 처리 된 데이터와 함께 관련 View를 호출합니다.
전망
보기는 MVC 응용 프로그램의 프레젠테이션 계층입니다. 보기는 모델을 사용자에게 표시하는 방법을 결정합니다. 고급 레이아웃에 대한 간단한 데이터 렌더링을 지원하므로 웹 사이트가 모든 페이지에서 디자인을 표준화 할 수 있습니다. View는 응용 프로그램 전체에서 빠른 디자인 변경을 가능하게하는 테마 지원도 제공합니다.
증여자
Presenter는 FuelPHP에서 제공하는 특수 기능입니다. 컨트롤러와 뷰 사이의 접착제입니다. Controller는 데이터베이스에서 모델 검색,보기에 대한 데이터 생성 등과 같은 낮은 수준의 책임을 공유 할 수 있습니다. Controller는 View 대신 Presenter를 호출하여 View를 호출합니다. Presenter를 사용하면 비즈니스 로직과 프레젠테이션 레이어를 완전히 분리 할 수 있습니다.
계층 적 MVC
FuelPHP는 클라이언트 (브라우저)의 요청과 유사하게 다른 컨트롤러에서 하나의 컨트롤러를 호출하는 옵션을 제공합니다. 컨트롤러가 다른 컨트롤러를 호출하면 호출 된 컨트롤러는 응답을 클라이언트 (브라우저)에 렌더링하는 대신 호출하는 컨트롤러에 반환합니다. 이를 통해widgetization웹 애플리케이션의. 예를 들어 댓글 섹션은 기본 (블로그) 페이지의 하위 섹션뿐 아니라 독립형 페이지로 표시 될 수 있습니다.
기준 치수
FuelPHP의 두드러진 특징 중 하나는 웹 애플리케이션의 한 섹션을 모듈로 변환 할 수 있다는 것입니다. 이는 다른 애플리케이션간에 공유 할 수 있습니다. 예를 들어, 애플리케이션 용으로 만든 블로그 모듈은 소스 애플리케이션에서 대상 애플리케이션으로 모듈 코드를 복사하기 만하면 다른 애플리케이션에서 재사용 할 수 있습니다.
새 모듈을 만드는 것은 메인 애플리케이션을 개발하는 것만 큼 간단합니다. 구조는 모듈이 별도의 폴더를 코딩해야한다는 유일한 예외를 제외하고는 기본 애플리케이션과 유사합니다.
꾸러미
FuelPHP는 코드를 패키지라는 단일 단위로 구성하는 옵션을 제공합니다. 패키지는 웹 애플리케이션에 필요한 하나 이상의 기능을 포함 할 수 있습니다. 예를 들어 ORM, 전자 메일 등과 같은 데이터베이스 구성 요소를 패키지로 구성하고 필요할 때마다 사용할 수 있습니다.
패키지는 웹 페이지 나 부분 웹 페이지를 포함하지 않는다는 점에서 모듈과 다릅니다. 패키지는 FuelPHP 및 다른 PHP 프레임 워크에서 사용할 수 있습니다.
워크 플로우
FuelPHP의 워크 플로우는 간단하고 이해하기 쉽습니다. 다음 다이어그램에 설명되어 있습니다.
사용자가 애플리케이션에 요청을 보냅니다.
컨트롤러는 요청을 수신하고 모델과 상호 작용하여 정보를 수집하며, 모델은 데이터베이스와 상호 작용합니다.
컨트롤러는 다른 컨트롤러에 하위 요청을 보내 다른 컨트롤러와 상호 작용하여 정보를 수집합니다.
Controller는 검색된 모델을 뷰로 보내고, 그러면 프레젠테이션이 생성되고 응답으로 클라이언트에 전송됩니다.
경우에 따라 컨트롤러가 발표자에게 컨트롤을 전달할 수 있습니다. 이 경우 발표자는 모델에서 정보를 수집하여 클라이언트에게 보냅니다. 여기서 발표자는 데이터베이스에서 모델을 검색하는 것을 제외하고는 비즈니스 로직을 수행하지 않습니다.
이 장에서는 FuelPHP 프레임 워크에서 간단한 애플리케이션을 만드는 방법을 살펴 보겠습니다. 앞에서 설명한 것처럼 Fuel에서 새 프로젝트를 만드는 방법을 알고 있습니다. 직원 세부 정보의 예를 들어 보겠습니다.
다음 명령을 사용하여 Employee라는 프로젝트를 만들어 보겠습니다.
oil create employee
명령을 실행 한 후 employee 프로젝트는 다음과 같이 생성됩니다. file structure −
employee
├── CHANGELOG.md
├── composer.json
├── composer.lock
├── composer.phar
├── CONTRIBUTING.md
├── fuel
│ ├── app
│ │ ├── bootstrap.php
│ │ ├── cache
│ │ ├── classes
│ │ ├── config
│ │ ├── lang
│ │ ├── logs
│ │ ├── migrations
│ │ ├── modules
│ │ ├── tasks
│ │ ├── tests
│ │ ├── themes
│ │ ├── tmp
│ │ ├── vendor
│ │ └── views
│ ├── core
│ │ ├── base56.php
│ │ ├── base.php
│ │ ├── bootstrap.php
│ │ ├── bootstrap_phpunit.php
│ │ ├── classes
│ │ ├── composer.json
│ │ ├── config
│ │ ├── CONTRIBUTING.md
│ │ ├── lang
│ │ ├── phpunit.xml
│ │ ├── tasks
│ │ ├── tests
│ │ ├── vendor
│ │ └── views
│ ├── packages
│ │ ├── auth
│ │ ├── email
│ │ ├── oil
│ │ ├── orm
│ │ └── parser
│ └── vendor
│ ├── autoload.php
│ ├── composer
│ ├── fuelphp
│ ├── michelf
│ ├── monolog
│ ├── phpseclib
│ └── psr
├── LICENSE.md
├── oil
├── public
│ ├── assets
│ │ ├── css
│ │ ├── fonts
│ │ ├── img
│ │ └── js
│ ├── favicon.ico
│ ├── index.php
│ └── web.config
├── README.md
└── TESTING.md
42 directories, 21 files
응용 프로그램의 구조
FuelPHP 프레임 워크는 잘 구성된 애플리케이션 구조를 제공합니다. 응용 프로그램의 중요한 파일과 폴더를 확인하겠습니다.
fuel − 모든 PHP 파일을 포함합니다.
public − JavaScript, CSS, 이미지 등과 같이 브라우저를 통해 직접 액세스하는 모든 자산을 포함합니다.
oil− 애플리케이션 내에서 코드 생성 또는 대화 형 디버깅과 같은 명령 줄 작업을 실행하는 데 사용되는 실행 파일. 선택 사항입니다.
fuel/app/− 모든 애플리케이션 별 PHP 파일을 포함합니다. 여기에는 모델,보기 및 컨트롤러가 포함됩니다.
fuel/core/ − 이것은 Fuel 프레임 워크 자체가 존재하는 곳입니다.
fuel/packages/− 모든 연료 패키지가 포함되어 있습니다. 기본적으로 연료에는 oil, auth 및 orm의 세 가지 패키지가 포함됩니다. 이러한 패키지는 필요한 경우가 아니면로드되지 않습니다.
fuel/app/config/− 모든 응용 프로그램 관련 구성 파일을 포함합니다. 기본 애플리케이션 구성 파일 인 config.php 파일이 여기에 있습니다.
fuel/app/classes/− 모든 애플리케이션 특정 MVC 기반 PHP 파일을 포함합니다. 여기에는 컨트롤러, 모델, 도우미 클래스, 라이브러리 등이 포함됩니다.
fuel/app/classes/controller/ − 여기에 컨트롤러가 배치됩니다.
fuel/app/classes/model/ − 여기에 모델이 배치됩니다.
fuel/app/views/−보기 파일이 들어 있습니다. 뷰에 대한 특정 명명 규칙은 없습니다.
컨트롤러 추가
앞서 논의했듯이 FuelPHP는 MVC (Model-View-Controller) 개발 패턴을 기반으로합니다. MVC는 애플리케이션 로직과 프리젠 테이션을 분리하는 소프트웨어 접근 방식입니다. MVC 패턴에서 컨트롤러는 중요한 역할을하며 애플리케이션의 모든 웹 페이지는 컨트롤러가 처리해야합니다. 기본적으로 컨트롤러는 다음 위치에 있습니다.fuel/app/classes/controller/폴더. 여기에서 고유 한 Controller 클래스를 만들 수 있습니다.
fuel / app / classes / controller / 위치로 이동하여 employee.php 파일을 생성하십시오. 새 컨트롤러를 생성하려면 다음과 같이 정의 된 FuelPHP에서 제공하는 Controller 클래스를 확장하면됩니다.
employee.php
<?php
class Controller_Employee extends Controller {
public function action_home() {
// functionality of the home page
echo "FuelPHP-Employee application!";
}
}
이제 Employee Controller를 만들고 간단한 텍스트를 인쇄하는 public 메서드 action_home을 추가했습니다.
라우팅
라우팅은 웹 페이지 URI를 특정 컨트롤러 및 작업으로 확인합니다. FuelPHP 애플리케이션의 모든 웹 페이지는 컨트롤러가 실제로 실행되기 전에 라우팅을 거쳐야합니다. 기본적으로 각 컨트롤러는 다음 URI 패턴을 사용하여 확인할 수 있습니다.
<controller>/<action>
어디,
controller 컨트롤러 이름에서 네임 스페이스를 뺀 직원입니다.
action 메소드 이름에서 action_ 키워드를 뺀 값, home
새로 생성 된 컨트롤러에 액세스 할 수 있습니다. http://localhost:8080/employee/home 다음 결과가 생성됩니다.
결과
이 장에서는 FuelPHP 애플리케이션을 구성하는 방법을 이해할 것입니다. 기본적으로 구성 파일은fuel/app/config폴더. 응용 프로그램의 주요 구성은fuel/app/config/config.php. 구성은 PHP의 관련 배열을 사용하여 지정됩니다.
개요
기본적으로 모든 기본 구성 파일은 fuel/core/config폴더. 기본 구성을 재정의하려면 해당 키를/fuel/app/config/config.php파일을 열고 값을 수정하십시오. 다차원 배열을 단순화하기 위해“점 표기법”을 사용할 수 있습니다. 예를 들어 다음 구성은 동일한 용도로 사용됩니다 (지정된 패키지로드).
array("always_load" => array("packages" => array( ... ) ) );
always_load.packages = array( ... );
구성은 목적별로 그룹화하고 데이터베이스 구성을위한 db.php, 패키지 관리를위한 package.php 등과 같은 다른 파일을 사용하여 지정할 수 있습니다.
구성 형식 유형
FuelPHP는 매우 유연하며 구성을 지정하기 위해 다른 형식을 제공합니다. 기본 구성 형식은 php 배열을 사용하는 PHP입니다. 다른 옵션은-
INI − PHP 언어 자체를 포함한 많은 소프트웨어에서 지원하는 간단한 텍스트 기반 구성.
[group]
key = value
YAML − 이해하기 쉽고 들여 쓰기 기반이며 사람이 읽을 수있는 구성 관리.
group:
key: value
JSON − 이해하기 쉽고 개발자가 가장 많이 사용하는 파일 형식.
{
"group" :
{
"key": "value"
}
}
Memcached− 구성을 memcached 서버에 저장합니다. memcached 서버 세부 정보는 기본 구성 파일에서 지정할 수 있습니다.fuel/app/config/config.php 사용 config.memcached 기입.
DB− RDBMS 시스템에 설정을 저장합니다. 구성 테이블의 테이블 구조는 다음과 같습니다.
CREATE TABLE IF NOT EXISTS `config` (
`identifier` char(100) NOT NULL,
`config` longtext NOT NULL,
`hash` char(13) NOT NULL,
PRIMARY KEY (`identifier`)
)
데이터베이스 및 테이블 세부 정보는 config.database 및 config.table_name 항목을 사용하여 구성 파일에 지정할 수 있습니다 .
환경
환경을 통해 FuelPHP는 다양한 구성을로드하여 다양한 모드에서 작동 할 수 있습니다. FuelPHP는 다음과 같은 환경을 지원합니다.
Development − \ Fuel :: DEVELOPMENT는 개발 모드를 설정합니다.
Production − \ Fuel :: PRODUCTION은 생산 모드를 설정합니다.
Test − \ Fuel :: TEST는 테스트 모드를 설정합니다.
Staging − \ Fuel :: STAGING은 스테이징 모드를 설정합니다.
FuelPHP는 또한 새로운 환경의 생성을 지원합니다. 이를 통해 모든 개발자는 자신의 구성 설정을 가질 수 있으며 애플리케이션을 코딩하고 테스트하는 동안이를 활성화 할 수 있습니다. 특정 환경의 구성은 다음과 같이 환경 이름 (예 : test)으로 폴더를 만들고 새로 생성 된 폴더 안에 구성 파일을 배치하기 만하면 추가 할 수 있습니다.
. ├── config.php
├── db.php
├── development
│ └── db.php
├── production
│ └── db.php
├── routes.php
├── staging
│ └── db.php
└── test
└── db.php
4 directories, 7 files
환경 설정
환경을 설정하는 방법에는 세 가지가 있습니다.
Option 1− 웹 서버의 환경 변수로 환경을 설정합니다. 의 가상 호스트 섹션에 다음 코드를 추가합니다.httpd.confApache 웹 서버의 파일. 그것은 추가 될 수 있습니다.htaccess 파일도 있습니다.
SetEnv FUEL_ENV production
Option 2 − FuelPHP 부트 스트랩 파일로 환경 설정, /fuel/app/bootstrap.php
Fuel::$env = (isset($_SERVER['FUEL_ENV']
Option 3 − 기름을 이용한 환경 설정
$ env FUEL_ENV = production php oil -v
다음 결과가 생성됩니다.
Fuel: 1.8 running in "production" mode
ControllersFuelPHP 애플리케이션에 들어오는 각 요청을 처리 할 책임이 있습니다. FuelPHP에 따르면 컨트롤러는 다음 위치에 있습니다.fuel/app/classes/controller/. 먼저 Employee Controller를 생성 해 보겠습니다.
employee.php
<?php
class Controller_Employee extends Controller {
public function action_home() {
echo "FuelPHP-Employee application!";
}
public function action_index() {
echo "This is the index method of employee controller";
}
}
컨트롤러 방법
컨트롤러는 다음 중 하나를 사용하여 웹 요청을 처리합니다. action_ 방법. 응용 프로그램의 요구 사항에 따라 많은 action_ 메서드를 만들 수 있습니다 . 기본 action_ 메소드는 action_index 입니다. action_index 메소드는 다음 URL 중 하나로 호출 할 수 있습니다.
http://localhost:8080/employee/index
http://localhost:8080/employee/
결과
우리가 새로운 action방법 action_show 우리employee 신청.
<?php
class Controller_Employee extends Controller {
public function action_home() {
echo "FuelPHP-Employee application!";
}
public function action_index() {
echo "This is the index method of employee controller";
}
public function action_show() {
echo "This is the show method of employee controller";
}
}
action_show 메소드는 다음 URL을 사용하여 호출 할 수 있습니다.
http://localhost:8080/home/show
결과
before () 메서드
방법을 만들 수 있습니다. before컨트롤러에서. 이 메소드는 각각의 모든 action_ 메소드 호출 전에 실행 됩니다. 해당 메소드가 존재하지 않는 것으로 밝혀지면 호출되지 않습니다. 이 방법은 로그인 확인, 기본 데이터 가져 오기 등과 같은 일반적인 작업을 작성하는 데 도움이됩니다.
before 메서드를 만들고 간단한 텍스트 메시지를 인쇄 해 보겠습니다 .
public function before() {
echo "This message comes from <em>before()</em> method</br>";
}
작업 전 색인 페이지
작업 전 페이지 표시
after () 메서드
after() 방법은 before()하지만 action_ 메소드가 호출 된 후에 실행 됩니다. after () 메서드는 응답 을 입력으로 받아 응답 객체를 반환 합니다.
public function after($response) { if ( ! $response instanceof Response) {
$response = \Response::forge($response, $this->response_status); } return $response;
}
입력이 NULL이거나 응답 객체가 아닌 경우 Response의 forge 메서드를 사용하여 새 Response 객체를 만들고 반환합니다. 응답 클래스는 다음 장에서 자세히 배웁니다.
컨트롤러 확장
하나의 컨트롤러를 다른 컨트롤러에서 확장 할 수 있습니다. 다음은 기본 구문입니다.
class Controller_Employee extends Controller_Welcome {
// controller methods
}
이것은 공유 방법에 도움이 될 것입니다.
컨트롤러 생성
Fuel에는 Oil 명령을 사용하여 컨트롤러를 생성하는 옵션이 있습니다. 다음은 구문입니다.
통사론
oil g controller <controller-name>
예
oil g controller sample
위의 명령을 실행하면 다음과 같은 응답이 표시됩니다.
결과
Creating view: /path/to/project/fuel/app/views/template.php
Creating view: /path/to/project/fuel/app/views/sample/index.php
Creating controller: /path/to/project/fuel/app/classes/controller/sample.php
컨트롤러 유형
FuelPHP는 다양한 목적을 위해 다양한 유형의 컨트롤러를 제공합니다. 그들은 다음과 같습니다-
- 기본 컨트롤러
- 템플릿 컨트롤러
- 나머지 컨트롤러
- 하이브리드 컨트롤러
기본 컨트롤러
Controller는 FuelPHP에서 사용할 수있는 모든 다양한 유형의 컨트롤러를위한 기본 컨트롤러입니다. 웹 요청을 처리하는 데 필요한 모든 기본 기능을 제공합니다. 요청, 응답, 세션 등을 지원합니다. 달리 명시하지 않는 한 모든 예제에서 사용합니다.
템플릿 컨트롤러
템플릿 컨트롤러는 기본 컨트롤러의 확장입니다. 템플릿 지원, 미리 정의 된 before () 및 after () 메서드가 있습니다. 기본적으로 헤더, 푸터, 사이드 바 등이있는 레이아웃에서 뷰를 래핑하는 데 사용할 수 있습니다. 템플릿 컨트롤러를 생성하려면 Controller_Template 클래스 를 확장해야합니다 . 기본적으로 Controller_Template 을 확장하는 클래스의 모든 메서드 는 템플릿을 사용해야합니다.
다음과 같이 정의됩니다.
class Controller_Employee extends Controller_Template {
public function action_index() {
// add methods
}
}
뷰 장에서 템플릿 컨트롤러에 대해 자세히 설명합니다.
나머지 컨트롤러
Rest Controller는 기본 컨트롤러의 확장입니다. REST API 프로그래밍에 대한 사전 정의 된 지원이 있습니다. 이를 통해 API를 쉽게 구축 할 수 있습니다.
나머지 컨트롤러를 생성하려면 Controller_Rest 클래스 를 확장해야합니다 . 다음과 같이 정의됩니다.
class Controller_Employee extends Controller_Rest {
public function action_index() {
// add methods
}
}
나머지 컨트롤러에 대한 자세한 내용은 Ajax 장에서 설명합니다.
하이브리드 컨트롤러
하이브리드 컨트롤러는 단일 기본 컨트롤러에서 REST 컨트롤러와 템플릿 컨트롤러의 기능을 모두 수행합니다.
라우팅 맵은 특정 컨트롤러의 메서드에 대한 URI를 요청합니다. 이 장에서 우리는routing FuelPHP에서 자세히 설명합니다.
구성
경로 구성 파일은 다음 위치에 있습니다. fuel/app/config/routes.php. 기본값routes.php 파일은 다음과 같이 정의됩니다-
<?php
return array (
'_root_' => 'welcome/index', // The default route
'_404_' => 'welcome/404', // The main 404 route
'hello(/:name)?' => array('welcome/hello', 'name' => 'hello'),
);
여기, _root_응용 프로그램이 루트 경로 (예 : http : // localhost : 8080 /) 와 함께 요청 될 때 일치하는 미리 정의 된 기본 경로 입니다. _root_ 의 값은 컨트롤러와 일치 할 때 해결해야 할 작업입니다.welcome/index로 확인 Controller_Welcome의 컨트롤러 action_index 동작 방법. 마찬가지로 다음과 같은 예약 된 경로가 있습니다.
root − URI가 지정되지 않은 경우 기본 경로.
403 − HttpNoAccessException이 발견되면 발생합니다.
404 − 페이지를 찾을 수 없을 때 반환됩니다.
500 − HttpServerErrorException이 발견되면 발생합니다.
간단한 라우팅
경로는 요청 URI와 비교됩니다. 일치하는 항목이 있으면 요청이 URI로 라우팅됩니다. 간단한 라우팅은 다음과 같습니다.
return array (
'about' => 'site/about',
'login' => 'employee/login',
);
여기, about http : // localhost : 8080 / about과 일치하고 컨트롤러, Controller_Site 및 작업 메서드 인 action_about을 확인합니다.
login http : // localhost : 8080 / login과 일치하고 컨트롤러, Controller_Login 및 작업 방법, action_login을 확인합니다.
고급 라우팅
경로에 모든 정규식을 포함 할 수 있습니다. Fuel은 다음과 같은 고급 라우팅 기능을 지원합니다.
:any − 이는 URI의 해당 지점부터 일치하는 항목이며 "nothing"과 일치하지 않습니다.
:everything − : any와 비슷하지만 "nothing"과도 일치합니다.
:segment − 이것은 URI의 한 세그먼트와 만 일치하지만 해당 세그먼트는 무엇이든 될 수 있습니다.
:num − 이것은 모든 숫자와 일치합니다.
:alpha − UTF-8을 포함한 모든 알파벳 문자와 일치합니다.
:alnum − UTF-8을 포함한 모든 영숫자 문자와 일치합니다.
예를 들어 다음 경로는 URI http : // localhost : 8080 / hello / FuelPHP 와 일치 하고 컨트롤러, Controller_Welcome 및 action_hello 작업을 확인합니다.
'hello(/:name)?' => array('welcome/hello', 'name' => 'hello'),
Controller_Welcome 에서 대응하는 액션 방법 은 다음과 같습니다.
public function action_hello() {
$this->name = Request::active()->param('name', 'World'); $message = "Hello, " . $this->name; echo $message;
}
여기서는 Request 클래스를 사용하여 URL에서 이름 매개 변수를 가져 왔습니다. 이름이 없으면 World 를 기본값으로 사용합니다. 요청 및 응답 장 에서 요청 클래스를 배웁니다 .
결과
HTTP 메서드 작업
FuelPHP는 HTTP 메소드 접두사 작업과 일치하는 경로를 지원합니다. 다음은 기본 구문입니다.
class Controller_Employee extends Controller {
public function get_index() {
// called when the HTTP method is GET.
}
public function post_index(){
// called when the HTTP method is POST.
}
}
다음과 같이 구성 파일의 HTTP 동사를 기반으로 URL을 컨트롤러 및 작업으로 라우팅 할 수 있습니다.
return array (
// Routes GET /employee to /employee/all and POST /employee to /employee/create
‘employee’ => array(array('GET', new Route(‘employee/all')), array('POST',
new Route(‘employee/create'))),
);
HTTP 요청 및 HTTP 응답은 모든 웹 애플리케이션에서 중요한 역할을합니다. 제대로 처리하려면 http 요청의 전체 세부 정보를 가져와야합니다. 처리가 완료되면 처리 된 데이터를 http 응답을 통해 클라이언트로 보내야합니다.
FuelPHP는 우수한 Request 과 ResponseHTTP 요청과 HTTP 응답을 각각 읽고 쓰는 클래스입니다. 둘 다에 대해 배우자Request 과 Response 이 장의 수업.
의뢰
일반적인 웹 애플리케이션에서 애플리케이션은 현재 요청의 세부 정보를 구문 분석해야합니다. 요청 클래스는 애플리케이션에서 처리 할 현재 요청을 구문 분석하는 간단한 메서드를 제공합니다. 요청 은 http 클라이언트 역할을하여 새 요청을 생성하는 옵션도 제공합니다.
새 요청을 작성하면 애플리케이션이 애플리케이션의 다른 부분 또는 완전히 다른 애플리케이션을 요청하고 결과를 표시 할 수 있습니다. 이 장에서 들어오는 요청을 구문 분석하는 방법을 배우고 HMVC 요청 장에서 새 요청을 만드는 방법을 알아 보겠습니다.
요청 구문 분석
요청 클래스는 http 요청의 세부 사항을 가져 오는 세 가지 메소드를 제공합니다. 다음과 같습니다.
active − 현재 활성 http 요청을 반환하는 정적 메서드입니다.
$currentRequest = Request::active();
param – 지정된 매개 변수의 값을 반환합니다. 두 개의 인수가 포함됩니다. 첫 번째 인수는 매개 변수 이름이고 두 번째 인수는 현재 http 요청에서 매개 변수를 사용할 수없는 경우 반환 할 값입니다.
$param = Request::active()->param('employee_name', 'none');
params – 모든 매개 변수를 배열로 반환한다는 점을 제외하면 param과 동일합니다.
$params = Request::active()->params();
예
간단한 양식을 만들고 요청 클래스를 사용하여 양식을 처리해 보겠습니다.
Step 1− 직원 컨트롤러에 새로운 액션 action_request 를 생성합니다 .
public function action_request() {
}
Step 2 − 요청 메소드를 호출하여 현재 요청의 모든 매개 변수를 가져옵니다.
public function action_request() {
$params = Request::active()->params();
}
Step 3 − 가져온 매개 변수 배열을 덤프합니다.
public function action_request() {
$params = Request::active()->params(); echo dump($params);
}
Step 4− 경로 구성 파일 fuel / app / config / routes.php에 매개 변수를 포함하도록 경로를 변경하십시오.
'employee/request(/:name)?' => array('employee/request', 'name' => 'name'),
이제 새 작업 인 http : // localhost : 8080 / employee / request / Jon을 요청 하면 다음 응답이 표시됩니다.
응답
응답 클래스는 http 응답을 생성하는 옵션을 제공합니다. 기본적으로 대부분의 상황에서 직접 응답 클래스를 사용할 필요는 없습니다. 대신 View (다음 장에서 배울 것임)를 사용하여 http 응답을 만듭니다. View는 개발자로부터 http 응답을 숨기고 기본 Response 클래스를 사용하여 클라이언트에 응답을 보냅니다 . 고급 상황에서는 Response 클래스를 직접 사용하고 완전한 http 응답을 생성합니다.
응답 생성
응답은 헤더와 본문으로 구성됩니다. 기본 헤더는 http 상태 코드입니다. HTTP 상태 코드는 응답을 설명하기 위해 HTTP 프로토콜에 정의 된 표준 코드입니다. 예를 들어 상태 코드 200은 요청이 성공했음을 의미합니다.
응답 클래스는 http 응답을 생성하는 세 가지 인수를 제공합니다.
$body − http 응답의 본문
$status_code − http 응답의 상태 코드
$headers − 배열로서의 선택적 헤더
$body = "Hi, FuelPHP";
$headers = array ( 'Content-Type' => 'text/html', ); $response = new Response($body, 200, $headers);
다음과 같이 직원 컨트롤러에 새로운 액션 action_response 를 생성 해 보겠습니다 .
public function action_response() {
$body = "Hi, FuelPHP"; $headers = array ('Content-Type' => 'text/html',);
$response = new Response($body, 200, $headers); return $response;
}
결과
행동 양식
응답 클래스는 http 응답을 조작하는 많은 방법을 제공합니다. 다음과 같습니다.
forge − 위에서 본 응답 클래스 생성자와 동일합니다.
return Response::forge("Hi, FuelPHP", 404);
redirect− 응답을 보내는 대신 URL로 리디렉션하는 옵션을 제공합니다. 다음 인수가 포함됩니다.
a.url− 도착 URL b. method-리디렉션 방법. 위치 (기본값) 및 새로 고침 c . redirect_code-http 상태 코드. 기본값은 302입니다.
// use a URL
Response::redirect('http://some-domain/index', 'refresh');
// or use a relative URI
Response::redirect('employee/list');
redirect_back− 이전 페이지로 이동한다는 점을 제외하면 리다이렉트 방식과 유사합니다. 백 페이지를 사용할 수없는 경우 리디렉션 페이지를 지정할 수 있습니다.
// If there is no back page, go to the employee list page
Response::redirect_back('/employee/list', 'refresh');
set_status − http 상태 코드를 설정하는 옵션을 제공합니다.
$response = new Response(); $response->set_status(404);
set_header − http 헤더를 설정하는 옵션을 제공합니다.
$response = new Response(); $response->set_header('Content-Type', 'application/pdf');
// replace previous value using third arguments
$response->set_header('Content-Type', 'application/pdf', 'text/plain');
set_headers − 다음과 동일 set_header 하지만 배열을 사용하여 여러 헤더를 설정하는 옵션을 제공합니다.
$response = new Response();
$response->set_headers (array
'Content-Type' => 'application/pdf',
'Pragma' => 'no-cache',
));
get_header − 이전에 설정된 헤더 정보를 가져올 수 있습니다.
$response = new Response();
$response->set_header('Pragma', 'no-cache'); // returns 'no-cache' $header = $response->get_header('Pragma'); // returns array('Pragma' => 'no-cache') $header = $response->get_header();
body − http 응답의 본문을 설정하는 옵션을 제공합니다.
$response = new Response();
$response->body('Hi, FuelPHP'); // returns 'Hi, FuelPHP' $body = $response->body();
send_headers− 요청 된 클라이언트에게 헤더를 보냅니다. FuelPHP는이 메서드를 사용하여 클라이언트에 응답을 보냅니다. 일반적으로이 방법은 사용할 필요가 없습니다.
$response->send_headers();
send − http 응답에서 헤더가 제한 될 수 있다는 점을 제외하면 send_headers와 동일합니다.
// send the headers as well
$response->send(true); // only send the body $response->send(false);
$response->send();
ViewMVC 애플리케이션의 프리젠 테이션 계층입니다. 애플리케이션 로직과 프리젠 테이션 로직을 분리합니다. 컨트롤러가 HTML, CSS 또는 기타 콘텐츠를 생성해야 할 때 작업을 뷰 엔진으로 전달합니다.
FuelPHP는보기 엔진에 필요한 모든 기능을 갖춘 간단하고 유연한 클래스 인 View를 제공합니다. 뷰 클래스는 뷰 파일의 렌더링을 지원합니다. 파일보기는 PHP 지침이 포함 된 HTML 페이지입니다. 뷰 파일의 변수는 View 클래스를 PHP 배열로 사용하여 설정하고 배열의 키를 사용하여 뷰 파일에서 참조 할 수 있습니다. View 클래스의 중요한 메서드 몇 가지를 살펴 보겠습니다.
단조 공장
Purpose − 새로운 View 객체 생성
Parameter − 다음은 매개 변수입니다.
$file −보기 폴더, fuel / app / views와 관련된보기 파일의 경로
$data − 값 배열
$filter − 자동 인코딩 설정, 기본 구성 파일의 설정 기본값
Returns −보기의 인스턴스
예를 들어
$view = View::forge ('path/to/view', array( 'title' => "Show employee, 'employees' => $employees,
));
auto_filter
Purpose − 데이터 인코딩 여부 설정
Parameter − 다음은 매개 변수입니다.
$filter − 참 / 거짓
Returns − 현재보기 개체
예를 들면
$view->auto_filter();
$view = $view->auto_filter(false);
set_filename
Purpose −보기 파일을 설정하거나 변경할 수 있습니다.
Parameter − 다음은 매개 변수입니다.
$file −보기 폴더, 연료 / 앱 /보기와 관련된보기 파일 경로
Returns − 현재보기 개체
예를 들어
$view = new View();
$view>set_filename('path/to/view');
세트
Purpose − 하나 이상의 변수 값 설정
Parameter − 다음은 매개 변수입니다.
$key − 변수 이름 또는 값 배열
$value − 값 / null
$filter − 인코딩 설정, 참 / 거짓
Returns − 현재보기 개체
예를 들어
$view = new View(); $view->set(array('name' => 'Jon'));
set_global
set_global은 다음과 유사합니다. set단, 모든보기에 적용되고 모든보기에서 변수에 액세스 할 수 있다는 점을 제외하고는 이것은 정적 방법입니다.
View::set_global('name', 'Jon', false);
set_safe
Purpose − 안전한 인코딩을 사용하여 하나 이상의 변수 값을 설정합니다.
Parameter − 다음은 매개 변수입니다 −
$key − 변수 이름 또는 값 배열
$value − 값 / null
Returns − 현재보기 개체
예를 들어
$view = new View(); $view->set_safe(array('name' => 'Jon'), null);
가져 오기
Purpose − 하나 이상의 변수 값 얻기
Parameter − 다음은 매개 변수입니다.
$key − 변수 이름
$default − 키를 찾을 수없는 경우 반환되는 기본값
Returns − 입력 키의 값
예를 들어
$view = new View(); $name = $view>get('name'); // name = 'Jon'
세우다
Purpose − 뷰 파일을 로컬 및 글로벌 변수와 병합하여 문자열로 렌더링
Parameter − 다음은 매개 변수입니다 −
$file −보기 파일 이름
Returns − 렌더링 된 뷰 파일을 문자열로
예를 들면
$html = View::forge()->render('/path/to/view');
보기 만들기
뷰를 이해하기 위해 컨트롤러의 action_show , Controller_Employee 의 액션 메서드를 수정 해 보겠습니다 .
employee.php
<?php
class Controller_Employee extends Controller {
public function action_show() {
return View::forge('employee/show');
}
}
이제 fuel / app / views 에있는보기 디렉토리에 employee 폴더를 작성하십시오 . 그런 다음 employee 폴더 안에 show.php 파일을 만들고 다음 코드를 추가합니다.
show.php
<h3> My first view </h3>
이제 http : // localhost : 8080 / employee / show URL을 요청 하면 다음과 같은 결과가 생성됩니다.
보기에 데이터 전달
앞에서 설명한 것처럼 View 메서드를 사용하여 뷰에 데이터를 전달할 수 있습니다. 다음은 간단한 예입니다.
employee.php
class Controller_Employee extends Controller {
public function action_show() {
$data = array(); //stores variables going to views
$data['name'] = ‘Jon’; $data[‘job’] = ‘Designer’;
//assign the view to browser output
return View::forge('employee/show', $data);
}
}
이제 변경 사항을 view 파일.
show.php
<html>
<body>
Hello, <?php echo $name; ?>.
Your job is, <?php echo $job; ?>.
</body>
</html>
URL을 요청하면 다음과 같이 이름과 작업이 표시됩니다.
필터보기
뷰는 출력 인코딩을 사용하여 원하는 것을 전달합니다. 필터링되지 않은 데이터를 전달하려면 set 메서드를 사용할 수 있습니다.
employee.php
class Controller_Employee extends Controller {
public function action_show() {
$view = \View::forge('employee/show');
$view->set('name', 'Jon', true); $view->set('job', '<em>Designer</em>', false);
return $view;
}
}
URL을 요청하면 다음과 같이 강조 스타일로 작업 세부 정보가 표시됩니다.
내포 된 뷰
FuelPHP는 중첩 된 뷰를 지원합니다. 중첩 된보기에서보기는 하나 이상의보기를 포함 할 수 있습니다. 다른 뷰에서 뷰를 설정하려면 다음과 같이 render 메서드를 사용할 수 있습니다.
employee.php
class Controller_Employee extends Controller {
public function action_nestedview() {
//assign variables
$data = array();
$data['title'] = 'Home'; $data['name'] = 'Jon';
$data['job'] = 'Designer'; $views = array();
$views['head'] = View::forge('head', $data)->render();
$views['content'] = View::forge('employee/show', $data)->render();
return View::forge('layout', $views, false)->render();
}
}
fuel / app / views / layout.php
<html>
<head>
<?php echo $head; ?>
</head>
<body>
<?php echo $content; ?>
</body>
</html>
fuel / app / views / head.php
<title>
<?php echo $title; ?>
</title>
fuel / app / views / employee / show.php
Hello, <?php echo $name; ?>. Your job is, <?php echo $job; ?>.
URL http : // localhost : 8080 / employee / nestedview를 요청 하고 소스 뷰를 확인한 후 다음 코드를 제공합니다.
<html>
<head>
<title>Home</title>
</head>
<body>
Hello, Jon.
Your job is, Designer.
</body>
</html>
템플릿 컨트롤러
FuelPHP는 레이아웃 개념이 내장 된 컨트롤러 Controller_Template을 제공합니다. 레이아웃 개념은before() 과 after()컨트롤러의 방법. 템플릿 컨트롤러를 사용하려면 Controller 대신 Controller_Template을 사용하여 컨트롤러를 확장해야합니다. after () / before () 메서드를 사용하는 동안 parent :: before 및 parent :: after를 호출해야합니다. 그렇지 않으면 템플릿이 중단됩니다.
<?php
class Controller_Test extends Controller_Template {
public function before() {
parent::before();
// do stuff
}
public function after($response) { $response = parent::after($response); // do stuff return $response;
}
}
template.php
Fuel의 기본 템플릿 파일입니다. 템플릿 파일은 JS, CSS, HTML을 호출하고 뷰 부분을 호출하는 데 사용됩니다. 그것은에 있습니다fuel/app/views/. 템플릿은 헤더, 푸터, 사이드 바 등이있는 레이아웃에서 뷰를 감싸는 데 사용됩니다. 다음과 같이 action 메서드에서 $ template 변수를 사용하여 기본 템플릿을 변경할 수 있습니다.
fuel / app / classes / controller / test.php
<?php
class Controller_Test extends Controller_Template {
public $template = 'template_test';
public function action_index() {
$this->template->title = 'Example Page'; $this->template->content = View::forge('test/index');
}
}
fuel / app / views / template_test.php
<!DOCTYPE html>
<html>
<head>
<meta charset = "utf-8">
<title><?php echo $title; ?></title> <?php echo Asset::css('bootstrap.css'); ?> </head> <body> <div> <?php echo $content; ?>
</div>
</body>
</html>
fuel / app / views / test / index.php
<h3>My Test page</h3>
이제 URL http : // localhost : 8080 / test를 요청 하면 다음과 같은 결과가 생성됩니다.
결과
<!DOCTYPE html>
<html>
<head>
<meta charset = "utf-8">
<title>Example Page</title>
<link type = "text/css" rel = "stylesheet"
href = "http://localhost:8080/assets/css/bootstrap.css?1464964766" />
</head>
<body>
<div>
<h3>My Test page</h3>
</div>
</body>
</html>
보기 페이지 생성
Fuel 's Oil 콘솔을 사용하여보기 페이지를 생성 할 수 있습니다. 다음은 기본 구문입니다.
oil g controller <controller-name> <page1> <page2> ..
홈 및 로그인 페이지가있는 관리자 컨트롤러를 생성하려면 다음 명령을 사용하십시오.
oil g controller admin home login
결과
Creating view: /path/to/app/fuel/app/views/admin/home.php
Creating view: /path/to/app/fuel/app/views/admin/login.php
Creating controller: /path/to/app/fuel/app/classes/controller/admin.php
FuelPHP는 뷰를 생성하기 위해 컨트롤러 뒤에 추가 레이어를 제공합니다. 컨트롤러가 입력을 처리하고 비즈니스 로직을 완료하면 컨트롤러는Presenter는 데이터베이스에서 데이터 가져 오기, 뷰 데이터 설정 등과 같은 추가 논리를 처리 한 다음 View 개체를 호출합니다.
다음과 같이 Presenter 클래스를 사용하여 뷰를 렌더링 할 수 있습니다.
fuel / app / classes / controller / employee.php
public Controller_Employee extends Controller {
public function action_welcome() {
return Presenter::forge('employee/hello');
}
}
발표자 클래스의 기본 위치는 fuel / app / classes / presenter / 입니다. 다음은 간단한 예입니다.
fuel / app / classes / presenter / employee / hello.php
<?php
class Presenter_Employee_Hello extends Presenter {
public function view() {
$this->name = Request::active()->param('name', 'World');
}
}
위 발표자 클래스의보기 파일은 지정된 보기 폴더에 상대적인 employee / hello.php 로 확인됩니다.
fuel / app / views / employee / hello.php
<h3>Hi, <?php echo $name; ?></h3>
마지막으로, 다음과 같이 직원의 환영 조치와 일치하도록 경로를 변경하십시오.
fuel / app / config / routes.php
'employee/hello(/:name)?' => array('employee/welcome', 'name' => 'hello'),
이제 URL http : // localhost : 8080 / employee / hello / Jon을 요청 하면 다음 결과가 렌더링됩니다.
결과
모델은 FuelPHP 웹 프레임 워크에서 중요한 역할을합니다. 응용 프로그램의 비즈니스 항목을 나타냅니다. 고객이 제공하거나 백엔드 데이터베이스에서 가져 와서 비즈니스 규칙에 따라 조작하고 데이터베이스에 다시 유지합니다. 이 장에서 모델과 모델이 백엔드 시스템과 상호 작용하는 방법에 대해 알아 보겠습니다.
모델 생성
FuelPHP에서 model은 내장 된 Model 클래스를 확장하는 단순한 PHP 클래스입니다. 기본적으로 모델에는 컨트롤러와 유사한 Model_ 접두사가 붙을 수 있으며fuel/app/classes/model/폴더. 기본 직원 모델을 만들고 진행하면서 확장 해 보겠습니다.
fuel / app / classes / model / employee.php
<?php
namespace Model;
class Model_Employee extends \Model {
public static function fetchAll() {
// Code to fetch employee from database
}
}
모델에 액세스
모델이 정의되면 다음과 같이 컨트롤러에 포함하는 것만으로 모든 컨트롤러에서 자유롭게 사용할 수 있습니다.
use \Model\Employee;
class Controller_Employee extends Controller {
public function action_index() {
$employees = Employee::fetchAll();
}
}
데이터베이스 개요
FuelPHP는 자체 데이터베이스 추상화 계층을 제공하여 데이터베이스에서 데이터를 가져옵니다. 기본 및 고급 ORM 기반 도구를 모두 제공합니다. 기본 툴킷은 DB, DBUtil 및 Query_Builer 기반 클래스로 구성됩니다. 고급 툴킷은 Orm입니다. Orm 툴킷은 기본 툴킷에서 파생되며 별도의 패키지로 번들됩니다.
데이터베이스 구성
FuelPHP는 기본 구성 파일에서 데이터베이스 설정을 분리하고 파일은 fuel/app/config/db.php. 각 환경에 대해 별도의 설정을 지원합니다. 현재 FuelPHP는 MySQL, MySQLi 및 PDO 드라이버를 지원합니다. 샘플 설정은 다음과 같습니다.
<?php
return array (
'development' => array (
'type' => 'mysqli',
'connection' => array (
'hostname' => 'localhost',
'port' => '3306',
'database' => 'tutorialspoint_fueldb',
'username' => 'root',
'password' => 'password',
'persistent' => false,
'compress' => false,
),
'identifier' => '`',
'table_prefix' => '',
'charset' => 'utf8',
'enable_cache' => true,
'profiling' => false,
'readonly' => false,
),
)
DB 기반 툴킷
그만큼 DB class응용 프로그램에서 데이터베이스에 액세스하는 가장 간단한 옵션입니다. 데이터베이스 쿼리를 작성하고, 대상 데이터베이스에 대해 실행하고, 최종적으로 결과를 가져 오는 옵션을 제공합니다. DB의 클래스 다음의 클래스와 상호 작용은 포괄적 인 데이터베이스 API를 제공한다.
Database_Connection − 데이터베이스와 상호 작용하는 싱글 톤 및 메인 클래스
Database_Query − SQL 쿼리를 실행하고 결과를 가져 오는 기본, 구체적인 클래스
Database_Query_Builder − SQL 쿼리 작성을위한 기본, 추상 클래스
Database_Query_Builder_Join − SQL 조인을 작성하는 클래스
Database_Query_Builder_Where − SQL 쿼리 조건을 구축하기위한 추상 클래스
Database_Query_Builder_Select − SQL 선택 쿼리를 작성하는 구체적인 클래스
Database_Query_Builder_Insert − SQL 삽입 쿼리를 작성하는 추상 클래스
Database_Query_Builder_Update − SQL 업데이트 쿼리 작성을위한 추상 클래스
Database_Query_Builder_Delete − SQL 삭제 쿼리를 작성하는 추상 클래스
다음 다이어그램은 클래스와 클래스에서 제공하는 메서드 간의 관계를 보여줍니다.
DB API
이 섹션의 DB 클래스에서 사용할 수있는 가장 중요한 방법에 대해 알아 보겠습니다.
예
Purpose− 새로운 Database_Connection 인스턴스를 생성하고 반환합니다 .
Parameter −
$db − 구성 파일에 정의 된 데이터베이스 연결 이름, 선택 사항.
Returns− Database_Connection 객체를 반환 합니다.
예를 들면
$db = DB::instance(); $db = DB::instance('test');
질문
Purpose − 제공된 SQL 문을 준비하고 데이터베이스에서 데이터를 삽입, 업데이트, 삭제 또는 가져 오는 데 사용할 수있는 Database_Query 객체를 반환합니다.
Parameter −
$query − SQL 문, 자리 표시자를 포함 할 수 있습니다.
$type − SQL 유형, 선택 사항 (DB :: SELECT, DB :: INSERT, DB :: UPDATE 및 DB :: DELETE)
Returns− Database_Query 객체를 반환 합니다.
예를 들면
$query = DB::query('SELECT * FROM 'employees'');
last_query
Purpose − 마지막으로 실행 된 쿼리를 얻으려면
Parameter − 없음
Returns − 마지막으로 실행 된 쿼리를 반환합니다.
예를 들면
$employees = DB::Select('Select * from 'employee'');
$sql = DB::last_query();
고르다
Purpose − 쿼리의 선택 부분 생성
Parameter −
$columns − 데이터베이스 열 이름 목록
Returns − Database_Query_Builder_Select 객체를 반환합니다.
예를 들면
$query = DB::select(); // Select * $query = DB::select('id', 'name'); // Select id, name
select_array (DB)
열을 배열로 보낼 수 있다는 점을 제외하면 select와 유사합니다.
$query = DB::select_array(array('id', 'name')); // Select id, name
끼워 넣다
Purpose − 쿼리의 삽입 부분 생성
Parameter −
$table_name − 데이터베이스 테이블의 이름
$columns − 테이블 열 배열
Returns − Database_Query_Builder_Insert 객체를 반환합니다.
예를 들면
$query = DB::insert('employee'); // Insert into employee
$query = DB::insert('employee', array('id', 'name')); // Insert into employee (id, name)
최신 정보
Purpose − 쿼리의 업데이트 부분 생성
Parameter −
$table_name − 데이터베이스 테이블의 이름
Returns − Database_Query_Builder_Update 객체를 반환합니다.
예를 들면
$query = DB::update('employee'); // update `employee`
지우다
Purpose − 쿼리의 삭제 부분 생성
Parameter −
$table_name − 데이터베이스 테이블의 이름
Returns − Database_Query_Builder_Delete 객체를 반환합니다.
예를 들어
$query = DB::delete('employee'); // delete from 'employee'
쿼리 API
Database_Query데이터베이스 연결을 설정하고, 쿼리를 실행하고, 결과를 연관 배열 또는 객체로 가져 오는 옵션을 제공합니다. Database_Query 클래스에서 제공하는 메서드를 살펴 보겠습니다.
set_connection
Purpose − 질의를 실행할 데이터베이스 (데이터베이스 연결 세부 정보)를 설정하려면
Parameter − $ db-데이터베이스 연결 이름
Returns− Database_Query 객체를 반환 합니다.
예를 들면
$query = DB::query('DELETE * FROM employee', DB::DELETE); $query->set_connection('2nd-db');
매개 변수
Purpose − Query 개체에 정의 된 매개 변수 값을 설정하려면
Parameter −
$param − 매개 변수 이름
$value − 매개 변수 값
Returns− Database_Query 객체를 반환 합니다.
예를 들면
// set some variables
$table = 'employee'; $id = 1;
$name = 'Jon'; // don't use $query = DB::query('SELECT * FROM '.$table.'. WHERE id = '.$id.' AND name = "'.$name.'"'); // but use $query = DB::query('SELECT * FROM :tablename WHERE id = :id AND name = :name');
$query->param('tablename', 'employee'); $query->param('id', $id); $query->param('name', $name);
유사한 방법
parameters 한 번에 여러 값을 제공하는 옵션을 제공한다는 점을 제외하고는 유사한 객체입니다.
$query->parameters (array(
'tablename' => $table, 'id' => $id,
'name' => $name
});
묶다
Purpose − 쿼리 개체에 정의 된 매개 변수에 변수를 설정하려면
Parameter −
$param − 매개 변수 이름
$var − 매개 변수를 바인딩 할 변수
Returns− Database_Query 객체를 반환 합니다.
예를 들면
// bind a query parameter
$table = 'employee';
$query = DB::query('DELETE * FROM :tablename', DB::DELETE); $query->bind('tablename', $table); // update the variable $table = 'employee_salary';
// DELETE * FROM `employee_salary`;
$sql = $query->compile();
엮다
Purpose − SQL 질의에 정의 된 질의 객체를 컴파일하려면
Parameter −
$db − 연결 문자열, 선택 사항
Returns −
예를 들면
// assign a value to a query parameter
$table = 'employee';
$query = DB::query('DELETE * FROM :tablename', DB::DELETE); $query->param('tablename', $table); // compile the query, returns: DELETE * FROM employee $sql = $query->compile();
실행하다
Purpose − Query 객체에 정의 된 쿼리를 실행하고 결과를 반환하려면
Parameter −
$db − 데이터베이스 연결 이름
Returns − 결과를 반환합니다.
예를 들면
// assign a value to a query parameter
$table = 'employee'; $query = DB::query('DELETE * FROM :tablename', DB::DELETE);
$query->param('tablename', $table);
// execute the query
$query->execute();
as_assoc
Purpose − 반환 유형을 객체 대신 연관 배열로 설정하려면
Parameter − 없음
Returns − 현재 개체를 반환
예를 들면
$query = DB::query('SELECT * FROM employee', DB::SELECT);
$result = $query->as_assoc()->execute();
foreach ($result as $row) {
echo $row['id'];
}
as_object
Purpose − 반환 유형을 연관 배열 대신 객체로 설정하려면
Parameter − 없음
Returns − 현재 개체를 반환
예를 들면
$query = DB::query('SELECT * FROM employee', DB::SELECT);
$result = $query->as_object()->execute();
foreach ($result as $row) {
echo $row->id; } // have ORM model objects return instead $result = $query->as_object('Model_Employee')->execute();
쿼리 빌더 API
쿼리 빌더 (Query_Builder) 기반 클래스는 SQL 쿼리를 동적으로 빌드하는 옵션을 제공합니다. 여기에는 쿼리 를 선택 (Query_Builder_Select) , 삽입 (Query_Builder_Insert) , 업데이트 (Query_Builder_Update) 및 삭제 (Query_Builder_Delete)하는 네 개의 클래스가 있습니다. 이러한 클래스는 Query_Builder_Where 클래스 (조건 생성 옵션)에서 파생되며 , 자체적 으로 모든 클래스의 기본 인 Query_Builder 에서 파생됩니다 .
Query_Builder 클래스에서 제공하는 메서드를 살펴 보겠습니다.
고르다
Purpose − 선택 쿼리의 열을 생성합니다.
Parameter −
$columns − 열 목록, 선택 사항
Returns − 현재 인스턴스를 반환
예를 들면
$query = DB::select('name') // select `name` $query = DB::select(array('first_name', 'name')) // select `first_name` as `name`
...에서
Purpose − 선택 쿼리의 테이블 세부 정보를 생성하려면
Parameter −
$tables − 테이블 목록
Returns − 현재 인스턴스를 반환
예를 들면
$query = DB::select('name')->from('employee') // select `name` from `employee`
어디
Purpose − 쿼리 선택, 삽입 및 업데이트 조건을 생성하려면
Parameters −
$column − 열 이름 또는 배열 ($ column, $ alias);
$op − 논리 연산자, =,! =, IN, BETWEEN 및 LIKE, 선택 사항;
$value − 열 값
Returns − 현재 인스턴스를 반환
예를 들면
$query = DB::select('name')->from('employee')
$query = $query->where('name', '=', 'Jon');
// select `name` from `employee` where `name` = `Jon`;
유사한 방법
유사한 메소드는 where_open (), and_where_open (), or_where_open (), where_close (), and_where_close (), or_where_close ()입니다. 조건 주위에 추가 키워드와 대괄호를 추가한다는 점을 제외하면 where () 메서드와 유사합니다. 다음은 샘플 코드입니다.
$query = DB::select('*')->from('employee'); $query->where('email', 'like', '%@gmail.com');
$query->or_where_open(); $query->where('name', 'Jon');
$query->and_where('surname', 'Peter'); $query->or_where_close();
// SELECT * FROM `employee` WHERE `email` LIKE "%gmail.com" OR
(`name` = "Jon" AND `surname` = "Peter")
어울리다
Purpose − 선택 쿼리의 테이블 조인을 생성하려면
Parameters −
$table − 테이블 이름 또는 배열 ($ table, $ alias);
$type − 조인 유형 (LEFT, RIGHT, INNER 등)
Returns − 현재 인스턴스를 반환
예
$query = DB::select('name')->from('employee')->join('employee_salary')
// select `name` from `employee` JOIN `employee_salary`
의 위에
Purpose − 선택 쿼리에서 조인 조건을 생성하려면
Parameters −
$c1 − 배열에 별칭이있는 테이블 이름 또는 테이블 이름;
$op − 논리 연산자
$c2 − 배열에 별칭이있는 테이블 이름 또는 테이블 이름
Returns − 현재 인스턴스를 반환
예를 들면
$query = DB::select('name')->from('employee')->join('employee_salary') $query = $query->on('employee.employee_id', '=', 'employee_salary.employee_id')
// select `name` from `employee` JOIN `employee_salary` on
// `employee.employee_id` = `employee_salary.employee_id`
유사한 방법
관련 메소드는 and_on () 및 or_on ()입니다. 조인 주위에 추가 키워드와 대괄호를 추가한다는 점을 제외하면 on ()과 유사합니다.
group_by
Purpose − 쿼리별로 그룹을 생성하려면
Parameter − $columns − 결과를 그룹화 할 열 이름
Returns − 현재 인스턴스를 반환
예를 들면
$query = DB::select('name')->from('employee') $query = $query->group_by('name');
// select `name` from `employee` group by `name`
갖는
Purpose − SQL 질의 조건으로 그룹 생성하기
Parameter − $column − 열 이름 또는 배열 ( $column, $별칭); $op − 논리 연산자, =,! =, IN, BETWEEN 및 LIKE, 선택 사항; $value − 열 값
Returns − 현재 인스턴스를 반환
예
$query = DB::select('name')->from('employee') $query = $query->group_by('name'); $query = $query->having('name', '!=', 'Jon');
// select `name` from `employee` group by `name` having `name` != `Jon`
유사한 방법
유사한 메소드는 having_open (), and_having_open (), or_having_open (), having_close (), and_having_close (), or_having_close ()입니다. 조건 주위에 추가 키워드와 대괄호를 추가한다는 점을 제외하면 having () 메서드와 유사합니다.
초기화
Purpose − 쿼리를 재설정하려면
Parameter − 없음
Returns − 현재 인스턴스를 반환
예를 들면
$query = DB::select('name')->from('employee')
$query->reset() $query = DB::select('name')->from('employee_salary')
// select `name` from `employee_salary`
DBUtil 클래스
DBUtil 클래스는 일상적인 데이터베이스 작업을 관리하고 수행하는 옵션을 제공합니다. 중요한 방법 중 일부는 다음과 같습니다.
- set_connection-기본 연결을 설정합니다.
DBUtil::set_connection('new_database');
- create_database-데이터베이스를 생성합니다.
DBUtil::create_database('my_database');
- drop_database-데이터베이스를 삭제합니다.
DBUtil::drop_database('my_database');
- table_exists-주어진 테이블이 존재하는지 확인합니다.
if(DBUtil::table_exists('my_table')) {
// Table exists
} else {
// Table does NOT exist, create it!
}
- drop_table-테이블을 삭제합니다.
DBUtil::drop_table('my_table');
- create_table-테이블을 생성합니다.
\DBUtil::create_table (
'users',
array (
'id' => array('type' => 'int', 'auto_increment' => true),
'name' => array('type' => 'text'),
),
);
Orm 툴킷
FuelPHP는 널리 사용되는 ORM 개념을 사용하여 고급 데이터베이스 계층을 제공합니다. Active record pattern. 툴킷은 애플리케이션에 포함되어 있지만 기본적으로 구성되지는 않습니다. 패키지로 번들로 제공되며 패키지 이름은 orm입니다. 기본 구성 파일에 다음 구성을 추가 할 수 있습니다.fuel/app/config/config.php orm 툴킷을로드합니다.
'always_load' => array (
'packages' => array (
'orm',
),
),
모델 생성
Orm은 기본 모델 클래스 Orm \ Model을 제공합니다. ORM 기능을 사용하려면 orm 모델로 모델을 확장해야합니다. 다음은 샘플 코드입니다.
class Model_Employee extends Orm\Model {}
구성
Orm은 ORM 기능을 사용하도록 모델을 구성하기위한 설정 세트를 제공합니다. 그들은 다음과 같습니다-
connection− 모델에서 정적 _connection 속성을 설정하여 연결 이름을 지정합니다.
class Model_Employee extends Orm\Model {
protected static $_connection = "production";
}
table name− 모델에서 정적 _table_name 속성을 설정 하여 백엔드 테이블의 테이블 이름을 지정합니다.
class Model_Employee extends Orm\Model {
protected static $_table_name = 'employee';
}
primary key− 모델에서 정적 _primary_key 속성을 설정 하여 백엔드 테이블의 기본 키를 지정합니다.
class Model_Employee extends Orm\Model {
protected static $_primary_key = array('id');
}
Columns− 모델에서 정적 _properties 속성을 설정하여 백엔드 테이블의 열을 지정합니다. data_type, label, validation, form elememts 등을 지원합니다.
class Model_Employee extends Orm\Model {
protected static $_properties = array (
'id',
'name' => array (
'data_type' => 'varchar',
'label' => 'Employee Name',
'validation' => array (
'required',
'min_length' => array(3),
'max_length' > array(80)
),
'form' => array (
'type' => 'text'
),
),
'age' => array (
'data_type' => 'int',
'label' => 'Employee Age',
'validation' => array (
'required',
),
'form' => array (
'type' => 'text'
),
),
);
}
Conditions− 정적 _conditions 속성을 설정하여 옵션별로 조건 및 순서를 설정합니다.
class Model_Employee extends Orm\Model {
protected static $_conditions = array (
'order_by' => array('id' => 'desc'),
'where' => array (
array('is_active', > true),
),
);
}
Observers− Orm 은 특정 이벤트에 행동을 추가 할 수있는 관찰자 기반 이벤트 시스템을 제공합니다. 동작을 추가하려면 먼저 모델에서 _observers 속성을 설정합니다 . 그런 다음 동작을 클래스로 정의하고 이벤트와 함께 _observers 속성 에 설정 합니다. 이벤트를 지정하지 않으면 모든 이벤트에 대해 동작이 호출됩니다. 여러 동작을 지정할 수도 있습니다.
class Model_Employee {
protected static $_observers = array (
'example', // will call Observer_Example class for all events
'Orm\\Observer_CreatedOn' => array (
'events' => array('before_insert'),
// will only call Orm\Observer_CreatedOn at before_insert event
)
);
}
창조하다
모델을 구성하고 나면 바로 방법을 사용할 수 있습니다. Orm 은 객체를 데이터베이스에 저장 하는 저장 방법을 제공 합니다. 다음과 같이 구성된 속성을 사용하여 데이터를 설정할 수 있습니다.
// option 1
$new = new Model_Employee(); $new->name = 'Jon';
$new->save(); // option 2, use forge instead of new $new = Model_Employee::forge();
$new->name = 'Jon'; $new->save();
// option 3, use array for properties
$props = array('name' => 'Jon'); $new = Model_Employee::forge($props); $new>save();
읽다
Orm은 데이터베이스에서 데이터를 가져와 객체에 바인딩하는 방법을 제공합니다. find 메소드는 입력 매개 변수에 따라 작동합니다. 다양한 옵션을 살펴 보겠습니다.
by primary key − 기본 키를 지정하면 구성된 테이블의 기본 키를 일치시켜 레코드를 반환합니다.
$employee = Model_Employee::find(1);
first / last record− 'first'또는 'last'를 지정하면 각각 첫 번째 레코드 또는 마지막 레코드를 가져옵니다. 옵션으로도 주문을 전달할 수 있습니다.
$entry = Model_Employee::find('first');
$entry = Model_Article::find('last', array('order_by' => 'id'));
All− 'all'을 지정하면 구성된 테이블에서 모든 레코드를 가져옵니다. 옵션 및 조건으로 주문을 지정할 수 있습니다.
$entry = Model_Employee::find('all');
$entry = Model_Article::find ('all', array (
'where' => array (
array ('name', 'Jon'),
),
'order_by' => array ('id' => 'desc'),
));
기본 데이터베이스 툴킷의 Query API를 고급 검색 옵션 모델과 함께 다음과 같이 사용할 수 있습니다.
$query = Model_Employee::query()->where('category_id', 1)->order_by('date', 'desc');
$number_of_employees = $query->count();
$latest_employee = $query->max('id');
$young_employee = $query->min('age');
$newest_employee = $query->get_one();
$employees = $query->limit(15)->get();
최신 정보
모델 업데이트는 새 모델을 생성하는 대신 find 메소드를 사용하여 업데이트 할 모델을 가져오고 속성을 업데이트 한 다음 다음과 같이 save 메소드를 호출한다는 점을 제외하면 생성과 동일합니다.
$entry = Model_Employee:find(4); $entry->name = 'Peter';
$entry->save();
지우다
Orm은 모델을 삭제하는 삭제 방법을 제공합니다. 개체를 가져오고 delete 메서드를 호출하면됩니다.
$entry = Model_Employee:find(4);
$entry->delete();
작업 예
모델과 데이터베이스를 이해하기 위해이 장에서 작동하는 예제를 만들어 보겠습니다.
데이터베이스 생성
다음 명령을 사용하여 MySQL 서버에 새 데이터베이스를 만듭니다.
create database tutorialspoint_fueldb
그런 다음 다음 명령을 사용하여 데이터베이스 내부에 테이블을 만듭니다.
create table employee(id int primary key, name varchar(20), age int not null);
데이터베이스 구성
데이터베이스 구성 파일 * fuel / app / config / db.php를 사용하여 데이터베이스를 구성하겠습니다. MySQL 서버를 연결하려면 다음 변경 사항을 추가하십시오.
<?php
return array (
'development' => array (
'type' => 'mysqli',
'connection' => array (
'hostname' => 'localhost',
'port' => '3306',
'database' => 'tutorialspoint_fueldb',
'username' => 'root',
'password' => 'pass',
'persistent' => false,
'compress' => false,
),
'identifier' => '`',
'table_prefix' => '',
'charset' => 'utf8',
'enable_cache' => true,
'profiling' => false,
'readonly' => false,
),
'production' => array (
'type' => 'mysqli',
'connection' => array (
'hostname' => 'localhost',
'port' => '3306',
'database' => 'tutorialspoint_fueldb',
'username' => 'root',
'password' => 'pass',
'persistent' => false,
'compress' => false,
),
'identifier' => '`',
'table_prefix' => '',
'charset' => 'utf8',
'enable_cache' => true,
'profiling' => false,
'readonly' => false,
),
);
ORM 패키지 포함
기본 구성 파일을 업데이트합니다. fuel/app/config/config.php 다음 구성을 추가하여 ORM 패키지를 포함합니다.
'always_load' => array (
'packages' => array (
'orm'
),
),
이제 애플리케이션에서 ORM이 활성화되었습니다.
직원 모델 생성
모델 폴더 아래에 새 모델 Employee를 만듭니다. “fuel/app/classes/model”. 다음과 같이 정의됩니다.
Employee.php
<?php
class Model_Employee extends Orm\Model {
protected static $_connection = 'production';
protected static $_table_name = 'employee'; protected static $_primary_key = array('id');
protected static $_properties = array (
'id',
'name' => array (
'data_type' => 'varchar',
'label' => 'Employee Name',
'form' => array (
'type' => 'text'
),
),
'age' => array (
'data_type' => 'int',
'label' => 'Employee Age',
'form' => array (
'type' => 'text'
),
),
);
}
액션 만들기
새로운 액션 만들기, action_model 직원 컨트롤러에서 fuel/app/classes/controller/employee.php 다음과 같이.
class Controller_Employee extends Controller {
public function action_model() {
// db based sql command to delete all employees
$query = db::query('delete from `employee`');
$query->execute('production'); // orm based query to add new employees $model = new model_employee();
$model->name = "john"; $model->age = 25;
$model->save(); $model = new model_employee();
$model->name = "peter"; $model->age = 20;
$model->save(); // orm based query to fetch all employee data $data = array();
$data['emps'] = model_employee::find('all'); return response::forge(view::forge('employee/model', $data));
}
}
보기 만들기
이제보기 파일을 만듭니다. model.php 에 위치한 “fuel/app/views/employee”. 파일에 다음 변경 사항을 추가하십시오.
<ul>
<?php
foreach($emps as $emp) {
?>
<li><?php echo $emp['name']; ?></li>
<?php
}
?>
</ul>
이제 URL을 요청하고 http://localhost:8080/employee/model 다음 결과가 생성됩니다.
결과
FuelPHP는 세 가지 클래스를 제공합니다. Form Fieldset, 및 Input, 양식 프로그래밍을 수행합니다.
Form class는 모든 HTML 양식 요소를 만드는 옵션을 제공합니다.
Fieldset 클래스는 모델 및 유효성 검사를 통합하는 상위 수준의 메서드를 통해 html 요소를 만드는 옵션을 제공합니다.
Input class는 http 매개 변수, 서버 변수 및 사용자 에이전트뿐만 아니라 html 양식을 통해 제출 된 데이터를 구문 분석하는 옵션을 제공합니다.
이 장에서 배우자 Form programming FuelPHP에서.
형태
앞에서 논의했듯이 Form 클래스는 html 양식 요소를 생성하는 방법을 제공하며 중요한 방법은 다음과 같습니다.
열다()
open()새 양식을 만드는 데 사용됩니다. 다음 두 가지 매개 변수를 제공합니다.
$attributes − 배열 형태의 태그 속성 또는 문자열 형태의 액션 URL.
$hidden − 숨겨진 필드 이름과 그 값의 배열.
echo Form::open('/employee/add');
echo Form::open(array('action' => '/employee/add', 'method' => 'post'));
닫기()
close() 단순히 양식을 닫습니다.
echo Form::close();
입력()
input()html 입력 요소를 생성합니다. 다음과 같은 세 가지 매개 변수가 있습니다.
$field − 입력 요소의 이름
$value − 입력 요소의 값
$attributes − 배열로 입력 요소의 속성
echo Form::input('name', 'jon', array('style' => 'border: 20px;'));
라벨 요소
labelhtml 레이블 요소를 만듭니다. 다음과 같은 세 가지 매개 변수가 있습니다.
$label − 표시 할 라벨
$id − 관련 양식 요소 ID
$attributes − 레이블 요소의 속성을 배열로
echo Form::label('Employee Name', 'employee_name');
숨겨진
hidden 입력 요소의 유형을 숨김으로 설정한다는 점을 제외하면 입력 방법과 유사합니다.
암호
password 입력 요소의 유형을 암호로 설정한다는 점을 제외하면 입력 방법과 유사합니다.
라디오
radio입력 요소의 유형을 라디오로 설정한다는 점을 제외하면 입력 방법과 유사합니다. 다음 네 가지 매개 변수가 있습니다.
$field − 입력 요소의 이름
$value − 입력 요소의 값
$checked − 항목 확인 여부 (참 / 거짓)
$attributes − 배열로 입력 요소의 속성
echo Form::label('Male', 'gender');
echo Form::radio('gender', 'Male', true);
echo Form::label('Female', 'gender');
echo Form::radio('gender', 'Female');
체크 박스
checkbox입력 요소의 유형을 확인란으로 설정한다는 점을 제외하면 입력 방법과 유사합니다. 다음 네 가지 매개 변수가 있습니다.
$field − 입력 요소의 이름
$value − 입력 요소의 값
$checked − 항목 확인 여부 (참 / 거짓)
$attributes − 배열로 입력 요소의 속성
echo Form::label('Male', 'gender');
echo Form::checkbox('gender', 'Male', true);
echo Form::label('Female', 'gender');
echo Form::checkbox('gender', 'Female');
파일
file 입력 요소의 유형을 파일로 설정한다는 점을 제외하면 입력 방법과 유사합니다.
텍스트 영역
textareahtml textarea 요소를 만듭니다. 다음과 같은 세 가지 매개 변수가 있습니다.
$field − 텍스트 영역 요소의 이름
$value − 텍스트 영역 요소의 값
$attributes − 배열로 텍스트 영역 요소의 속성
echo Form::textarea ('description', 'original data (value)', array ('rows' => 6,
'cols' => 8));
고르다
selectHTML 선택 요소를 만듭니다. 다음 네 가지 매개 변수가 있습니다.
$field − 선택 요소의 이름
$values − 초기 선택 값
$options− 배열로 옵션. 옵션은 중첩 배열을 사용하여 그룹화 될 수 있습니다.
$attributes − 배열로 입력 요소의 속성
echo Form::select (
'country',
'none',
array (
'none' => 'None',
'asia' => array (
'in' > 'India',
'cn' => 'China'
),
'us' => 'United States'
)
);
제출
submit 제출할 입력 요소의 유형을 설정한다는 점을 제외하면 입력 방법과 유사합니다.
단추
buttonhtml 버튼 요소를 만듭니다. 다음과 같은 세 가지 매개 변수가 있습니다.
$field − 버튼 요소의 이름
$value − 버튼 요소의 값
$attributes − 버튼 요소의 속성을 배열로
echo Form::button('emp_submit', 'Submit');
초기화
reset 재설정 할 입력 요소의 유형을 설정한다는 점을 제외하면 입력 방법과 유사합니다.
fieldset_open
fieldset_open은 html 필드 세트와 범례 요소를 만듭니다. 다음 두 가지 매개 변수가 있습니다.
attributes − 배열로 필드 셋 요소의 속성
legend − 생성 할 범례의 이름
// returns <fieldset class = "example-class" id = "example-id">
<legend>
Custom Legend
</legend>
echo Form::fieldset_open (array (
'class' => 'example-class',
'id' => 'exampleid',
'legend' => 'Custom Legend'
));
fieldset_close
fieldset_close는 HTML 필드 세트 닫기 태그를 만듭니다.
// returns </fieldset>
echo Form::fieldset_close();
입력 클래스
입력 클래스는 양식 세부 사항과 함께 모든 요청 데이터를 읽는 메소드를 제공합니다. 중요한 방법 중 일부는 다음과 같습니다.
uri
uri 요청의 현재 URI를 반환합니다.
// request: http://localhost:8080/employee/welcome
echo Input::uri(); // return /employee/welcome
방법
method 요청에 사용 된 HTTP 메서드를 반환합니다.
echo Input::method() // "POST"
가져 오기
get$ _GET 변수를 읽을 수 있습니다. 다음 두 가지 매개 변수가 있습니다.
$index − $ _GET 배열의 인덱스
$default − 색인을 찾을 수없는 경우 기본값.
echo Input::get('age', '20'); // returns $_GET['age']
우편
post$ _POST 변수를 읽을 수 있습니다. 다음 두 가지 매개 변수가 있습니다.
$index − $ _POST 배열의 인덱스
$default − 색인을 찾을 수없는 경우 기본값
echo Input::get('age', '20'); // returns $_POST['age']
매개 변수
param $ _GET에서 항목을 가져올 수 있습니다. $_POST, $_PUT 또는 $ _DELETE 변수. 다음 두 가지 매개 변수가 있습니다.
$index − 배열의 인덱스
$default − 색인을 찾을 수없는 경우 기본값
매개 변수를 지정하지 않으면 모든 항목이 반환됩니다.
echo Input::param('age', '20'); // returns $_POST['age']
파일
file$ _FILE 변수를 읽을 수 있습니다. 다음 두 가지 매개 변수가 있습니다.
$index − $ _POST 배열의 인덱스
$default − 색인을 찾을 수없는 경우 기본값
echo Input::file();
is_ajax
is_ajax 는 요청이 AJAX를 통해 이루어진 경우 true를 반환합니다.
echo Input::is_ajax() // return false
실험 계획안
protocol 요청에 사용 된 HTTP 프로토콜을 반환합니다.
echo Input::protocol() // returns "HTTP"
ip
ip 요청이 이루어진 IP 주소를 반환합니다.
echo Input::ip() // returns "84.45.34.24" (Public IP Address)
real_ip
real_ip 요청이 이루어진 실제 IP 주소 (클라이언트가 프록시 뒤에있는 경우)를 반환하려고합니다.
echo Input::real_ip() // returns "10.76.12.1" (local private IP Address)
섬기는 사람
server$ _SERVER 변수를 읽을 수 있습니다. 다음 두 가지 매개 변수가 있습니다.
$index − $ _POST 배열의 인덱스
$default − 색인을 찾을 수없는 경우 기본값.
echo Input::server('HTTP_HOST'); // returns localhost:8080
리퍼러
referrer$ _SERVER 변수에서 참조자를 반환합니다. 현재 요청의 http 참조자를 가져 오는 바로 가기 방법입니다.
사용자 에이전트
user_agent$ _SERVER 변수에서 사용자 에이전트를 반환합니다. 현재 요청의 http 사용자 에이전트를 가져 오는 바로 가기 방법입니다.
query_string
query_string$ _SERVER 변수에서 쿼리 문자열을 반환합니다. 현재 요청의 쿼리 문자열을 가져 오는 바로 가기 메서드입니다.
헤더
headers특정 또는 모든 헤더를 반환합니다. 다음 두 가지 매개 변수가 있습니다.
$index − HTTP 헤더의 이름
$default − 색인을 찾을 수없는 경우 기본값.
echo Input::headers('Content-Type'); // returns "text/html"
신장
extension 현재 요청의 URI 확장을 반환합니다.
// Example URL: http://localhost/test/
echo Input::extension(); // NULL
// Example URL: http://localhost/test.html
echo Input::extension(); // 'html'
작업 예
Form 및 Input 클래스를 사용하여 새 직원을 추가하는 간단한 양식을 만들어 보겠습니다.
양식 만들기
새로운 액션 만들기, get_add 다음과 같이 직원 컨트롤러에서.
public function get_add() {
return Response::forge(View::forge('employee/add'));
}
이제 다음과 같이 작업, fuel / app / views / employee / add.php에 대한보기를 추가하십시오.
<!DOCTYPE html>
<html lang = "en">
<head>
<title>Employee :: add page</title>
<meta charset = "utf-8">
<meta name = "viewport" content = "width = device-width, initial-scale = 1">
<?php echo Asset::css('bootstrap.css'); ?>
</head>
<body>
<div class = "container">
<?php
echo Form::open(array('action' => 'employee/add', 'method' => 'post'));
?>
<div class = "form-group">
<?php
echo Form::label('Employee name:', 'name');
echo Form::input('name', '', array('class' => 'form-control'));
?>
</div>
<div class = "form-group">
<?php
echo Form::label('Employee age:', 'age');
echo Form::input('age', '', array('class' => 'form-control'));
?>
</div>
<?php echo Form::button('frmbutton', 'Submit', array(
'class' => 'btn btn-default'));
?>
<?php
echo Form::close();
?>
</div>
</body>
</html>
여기서 우리는 bootstrap양식을 디자인합니다. FuelPHP는 부트 스트랩 구성 요소를 완벽하게 지원합니다. 이제 http : // localhost : 8080 / employee / add 페이지를 요청하면 다음 양식이 표시됩니다.
프로세스 양식
다음 과 같이 양식을 처리하고 사용자가 입력 한 직원 데이터를 직원 컨트롤러의 데이터베이스에 추가하는 새 작업 인 post_add 를 만듭니다 .
public function post_add() {
$name = Input::post('name');
$age = Input::post('age'); $model = new model_employee();
$model->name = $name;
$model->age = $age;
$model->save();
Response::redirect('employee/list');
}
여기에서는 사용자가 입력 한 데이터가 데이터베이스에 저장되면 직원 목록 페이지로 리디렉션되었습니다. 다음으로 직원 목록 페이지를 만듭니다.
직원 나열
다음과 같이 데이터베이스에 직원을 나열하는 새 작업 action_list를 만듭니다.
public function action_list() {
$data = array();
$data['emps'] = model_employee::find('all'); return Response::forge(view::forge('employee/list', $data));
}
새보기 만들기, fuel/app/views/employee/list 위의 작업을 위해 다음과 같이하십시오.
<ul>
<?php
foreach($emps as $emp) {
?>
<li><?php echo $emp['name']; ?></li>
<?php
}
?>
</ul>
양식 확인
이제 URL을 요청하고 http://localhost:8080/employee/add, 다음 스크린 샷에 표시된대로 일부 직원 데이터를 입력하고 양식을 제출하십시오.
그러면 다음과 같이 데이터베이스에서 사용 가능한 모든 직원 (새로 추가 된 직원 포함)이 표시됩니다.
Validation웹 애플리케이션에서 가장 자주 반복되는 작업 중 하나입니다. 사용자는 양식에 필요한 데이터를 입력하고 제출합니다. 그런 다음 웹 응용 프로그램은 데이터를 처리하기 전에 데이터의 유효성을 검사해야합니다. 예를 들어, 사용자가 직원 데이터를 입력하고 post_action은 데이터베이스에 저장하기 전에 유효성을 검사해야합니다. FuelPHP는 이러한 목적을 위해 매우 간단한 클래스 인 Validation을 제공합니다.
FuelPHP에서는 유효성 검사의 개념이 매우 간단하고 유효성 검사 클래스를 통해 다양한 방법을 제공하여 양식을 올바르게 유효성 검사합니다. 다음은 유효성 검사의 워크 플로입니다.
Step 1 − 다음을 사용하여 새 유효성 검사 개체 만들기 forge 방법.
$val = Validation::forge();
Step 2 − add 메서드를 사용하여 유효성을 검사해야하는 필드를 추가합니다.
$val->add('name', 'Employee name');
Step 3 − 추가 된 필드에 대한 유효성 검사 규칙을 설정합니다. add_rule 방법.
$val->add('name', 'Employee name')->add_rule('required');
$val->add('age', 'Employee age')->add_rule('required')
->add_rule('numeric_min', 20)
->add_rule('numeric_max', 30);
Step 4 − 데이터를 검증하기 위해 run 메소드를 호출합니다.
// run validation on just post
if ($val->run()) {
// success
} else {
// falier
}
Step 5 − 유효성 검사 및 오류를 사용하여 각각 유효한 필드와 유효하지 않은 필드를 가져옵니다.
$vars = $val->validated();
$vars = $val->error();
규칙
FuelPHP에는 유효성을 검사 할 많은 규칙이 포함되어 있으며 새 규칙을 생성하는 옵션도 제공합니다. Validation 클래스에서 지원하는 규칙은 다음과 같습니다.
required − 입력 할 값
required_with− 다른 필드를 동반 필드로 설정합니다. 필드가 설정된 경우 컴패니언 필드도 설정해야합니다.
match_value − 필드 값과 일치시킬 값 설정
match_pattern − 필드의 값과 정규 표현식으로 일치시킬 값을 설정합니다.
match_field − 다른 필드의 값을 필드의 값과 일치시킬 값으로 설정
match_collection − 필드 값과 컬렉션으로 일치시킬 값 설정
min_length − 필드 값의 최소 길이 설정
max_length − 필드 값의 최대 길이 설정
exact_length − 필드 값의 정확한 길이 설정
valid_date − 필드 값을 유효한 날짜로 설정
valid_email − 필드 값을 유효한 이메일로 설정
valid_emails − 필드 값을 쉼표로 구분 된 유효한 이메일로 설정합니다.
valid_url − 필드 값을 유효한 URL로 설정
valid_ip − 필드 값을 유효한 IP로 설정
numeric_min − 필드 값의 최소값 설정
numeric_max − 필드 값의 최대 값 설정
numeric_between − 필드 값의 최소값과 최대 값 설정
valid_string − 정규식과 유사하지만 더 간단합니다.
$val->add('username', 'User name')->add_rule('valid_string', array('alpha, dots');
여기서 알파는 알파벳 문자를, 점은 (.)를 나타냅니다. 유효한 문자열은 알파벳 문자와 (.)를 포함하는 문자열입니다. 다른 옵션은 대문자, 소문자, 특수 문자, 숫자, 공백 등입니다.
작업 예
직원 추가 기능을 업데이트하여 유효성 검사를 포함 할 수 있습니다. 그냥 업데이트post_add 직원 컨트롤러의 방법은 다음과 같습니다.
public function post_add() {
$val = Validation::forge();
$val->add('name', 'Employee name')->add_rule('required'); $val->add('age', 'Employee age')->add_rule('required')
->add_rule('numeric_min', 20)
->add_rule('numeric_max', 30);
if ($val->run()) { $name = Input::post('name');
$age = Input::post('age'); $model = new model_employee();
$model->name = $name;
$model->age = $age;
$model->save();
Response::redirect('employee/list');
} else {
Response::redirect('employee/add');
}
}
여기에서 우리는 name필수 필드로 나이. 그만큼age20-30 사이 여야합니다. 두 규칙이 모두 유효하면 직원 데이터가 저장되고 직원 목록 페이지로 리디렉션됩니다. 그렇지 않으면 직원 데이터가 거부되고 직원 페이지를 추가하도록 리디렉션됩니다.
FuelPHP는 Fieldset 및 Fieldset_Field 클래스를 통해 고급 양식 프로그래밍을 제공합니다. Fieldset양식을 만드는 객체 지향 방법을 제공합니다. 모델을 완벽하게 지원합니다. 클라이언트 측 및 서버 측 유효성 검사도 기본적으로 지원합니다. 본격적인 양식을 만들기 위해서는 적절한 양식과 검증 설정으로 모델을 만드는 것으로 충분합니다. 이 장에서 Fieldset 클래스와이를 사용하여 양식을 만드는 방법에 대해 알아 보겠습니다.
필드 셋
Fieldset은 Fieldset_Field사물. Fieldset_Field는 유효성 검사와 함께 이름, 성 등과 같은 양식의 개별 항목을 정의합니다. Fieldset 클래스에는 필드를 추가 / 편집 / 제거하는 메서드가 있습니다. 모델에 정의 된 필드를 식별하고 주어진 모델에서 필드를 생성하는 옵션이 있습니다.Fieldset실제 작업을 수행하기 위해 백그라운드에서 Form 및 Validation 클래스를 사용합니다. Fieldset 클래스의 몇 가지 중요한 메서드를 살펴 보겠습니다.
단조 공장
forge새 Fieldset 인스턴스를 만듭니다. 다음 두 가지 매개 변수가 있습니다.
$name − 필드 셋 식별자
$config− 구성 배열. 가능한 옵션은 validation_instance 및 form_instance입니다. validation_instance 는 Validation 객체를 가질 수 있고 form_instance 는 Form 객체를 가질 수 있습니다.
$employee_form = Fieldset::forge('employee');
예
instance 이전에 생성 된 Fieldset 인스턴스를 식별자로 반환합니다.
$employee_form = Fieldset::instance('employee');
get_name
fieldset 인스턴스의 식별자를 가져옵니다.
$employee_form = Fieldset::forge('employee');
$name = $employee_form->get_name();
더하다
add새 Fieldset_Field 인스턴스를 만들고 현재 fieldset에 추가합니다. 다음 네 가지 매개 변수가 포함되어 있습니다.
$name − 필드 이름
$label − 필드 레이블
$attributes − HTML 태그 속성
$rules − 검증 규칙
$employee_field = $employee_form-> add (
'employee_lastname',
'Lastname',
array ('class' => 'pretty_input')
);
// with validation rules
$employee_form->add (
'email', 'E-mail',
array('type' => 'email', 'class' => 'pretty_input'),
array('required', 'valid_email')
);
add_before
add_before는 새로 생성 된 필드가 추가되기 전에 필드를 지정하는 하나의 추가 매개 변수가 있다는 점을 제외하면 add와 유사합니다.
$employee_form->add_before (
'employee_firstname',
'Firstname',
array ('class' => 'pretty_input'),
array(),
'employee_lastname'
);
지우다
delete fieldset에서 지정된 필드를 삭제합니다.
$employee_form->delete('employee_firstname');
들
field 모든 필드를 가져 오거나 fieldset에서 지정된 필드를 가져옵니다.
$fields = $employee_form->field(); $lastname_field = $employee_form->field('employee_lastname');
짓다
build$ this-> form ()-> build ()의 별칭입니다 . 양식의 HTML 마크 업을 생성합니다.
$employee_form->build(Uri::create('employee/add'));
활성화
enable 이전에 비활성화 된 필드를 다시 활성화합니다.
$employee_form->enable('employee_firstname');
비활성화
disable 필드 세트의 필드가 빌드되지 않도록 할 수 있습니다.
$employee_form->disable('employee_firstname');
형태
form 현재 fieldset의 Form 인스턴스를 반환합니다.
$form = employee_form->form();
add_model
add_model은 모델의 필드를 fieldset에 추가합니다. 다음과 같은 세 가지 매개 변수가 있습니다.
$class − 클래스 이름
$instance − 필드를 값으로 채울 클래스의 인스턴스
$method− 클래스의 메서드 이름. 이 메서드는 필드 세트에 필드를 추가하는 데 사용됩니다. Orm \ Model에는 필요한 방법이 있습니다. 기본 메소드 이름은 set_form_fields입니다.
$employee_form = Fieldset::forge('employee');
$employee_form->add_model('Model_Employee');
채우다
populate 모델 인스턴스를 사용하여 fieldset에서 필드의 초기 값을 설정합니다.
$emp = new Model_Employee();
$emp->name = "Jon"; $employee_form->populate($emp);
다시 채우다
repopulate 필드 세트의 필드를 다시 채운다는 점을 제외하면 채우기와 동일합니다.
확인
validation 현재 fieldset의 유효성 검사 인스턴스를 가져옵니다.
$validation = $employee_form->validation();
검증 됨
$ this-> validation ()-> validated ()의 별칭입니다.
input
$ this-> validation ()-> input ()에 대한 별칭.
error
$ this-> validation ()-> error ()에 대한 별칭.
show_errors
$ this-> validation ()-> show_errors ()의 별칭입니다.
작업 예
Fieldset 클래스를 사용하여 샘플 직원 애플리케이션에 새 직원을 추가하는 고급 양식을 만들어 보겠습니다.
모델 업데이트
필요한 유효성 검사 규칙으로 직원 모델을 업데이트하고 다음과 같이 유효성 검사 관찰자를 추가합니다.
<?php
class Model_Employee extends Orm\Model {
protected static $_connection = 'production';
protected static $_table_name = 'employee'; protected static $_primary_key = array('id');
protected static $_properties = array ( 'id', 'name' => array ( 'data_type' => 'varchar', 'label' => 'Employee Name', 'validation' => array ( 'required', 'min_length' => array(3), 'max_length' => array(80) ), 'form' => array ( 'type' => 'text' ), ), 'age' => array ( 'data_type' => 'int', 'label' => 'Employee Age', 'validation' => array ( 'required', ), 'form' => array ('type' => 'text' ), ), ); // Just add the Observer, and define the required event protected static $_observers = array('Orm\\Observer_Validation' => array (
'events' => array('before_save')));
}
여기서는 이름 및 연령 필드에 대한 유효성 검사 규칙을 정의하고 모델을 데이터베이스에 저장하기 전에 서버 측 유효성 검사를 수행 할 새 관찰자를 추가했습니다. 동일한 유효성 검사 규칙은 양식에 필요한 입력 유효성 검사 속성도 생성합니다.
양식 작성
다음과 같이 직원 컨트롤러에 새로운 액션 action_advancedform을 생성합니다.
public function action_advancedform() {
// create a new fieldset and add employee model
$fieldset = Fieldset::forge('employee')->add_model('Model_Employee'); // get form from fieldset $form = $fieldset->form(); // add submit button to the form $form->add('Submit', '', array('type' => 'submit', 'value' => 'Submit'));
// build the form and set the current page as action
$formHtml = $fieldset->build(Uri::create('employee/advancedform'));
// set form in data
$data = array(); $data['form'] = $formHtml; return Response::forge(View::forge('employee/advancedform', $data, false));
}
여기서는 fieldset을 사용하여 양식을 만들고보기로 양식을 보냅니다. 다음으로 작업에 대한보기를 추가하고fuel/app/views/employee/advancedform.php 다음과 같이.
<!DOCTYPE html>
<html lang = "en">
<head>
<title>Employee :: add page</title>
<meta charset = "utf-8">
<meta name = "viewport" content = "width = device-width, initial-scale = 1">
<?php echo Asset::css('bootstrap.css'); ?>
<style>
table {
width: 90%;
}
table tr {
width: 90%
}
table tr td {
width: 50%
}
input[type = text], select {
width: 100%;
padding: 12px 20px;
margin: 8px 0;
display: inline-block;
border: 1px solid #ccc;
border-radius: 4px;
box-sizing: border-box;
}
input[type = submit] {
width: 100%;
background-color: #3c3c3c;
color: white;
padding: 14px 20px;
margin: 8px 0;
border: none;
border-radius: 4px;
cursor: pointer;
}
div {
border-radius: 5px;
background-color: #f2f2f2;
padding: 20px;
}
</style>
</head>
<body>
<div class = "container">
<?php
if(isset($errors)) { echo $errors;
}
echo $form;
?>
</div>
</body>
</html>
이제 페이지 요청 http://localhost:8080/employee/add 다음 양식이 표시됩니다.
프로세스 양식
다음 과 같이 양식을 처리하고 사용자가 입력 한 직원 데이터를 직원 컨트롤러의 데이터베이스에 추가하기 위해 액션 메서드 action_advancedform 을 업데이트합니다 .
public function action_advancedform() {
// create a new fieldset and add employee model
$fieldset = Fieldset::forge('employee')->add_model('Model_Employee');
// get form from fieldset
$form = $fieldset->form();
// add submit button to the form
$form->add('Submit', '', array('type' => 'submit', 'value' => 'Submit')); // build the form and set the current page as action $formHtml = $fieldset->build(Uri::create('employee/advancedform')); if (Input::param() != array()) { try { $article = Model_Employee::forge();
$article->name = Input::param('name'); $article->url = Input::param('age');
$article->save(); Response::redirect('employee/list'); } catch (Orm\ValidationFailed $e) {
$view = View::forge('employee/advancedform'); $view->set('form', $formHtml, false); $view->set('errors', $e->getMessage(), false); } } return Response::forge($view);
}
여기서는 사용자가 입력 한 데이터를 확인하고 데이터베이스에 저장하면 직원 목록 페이지로 리디렉션되었습니다. 그렇지 않으면 양식이 다시 표시됩니다.
양식 만들기
이제 URL을 요청하고 http://localhost:8080/employee/add직원 데이터를 입력하고 양식을 제출하십시오. 데이터가 제공되지 않은 경우 양식은 다음 스크린 샷과 같이 사용자에게 데이터를 입력하라는 메시지를 표시합니다.
사용자가 클라이언트 측 유효성 검사를 건너 뛰면 서버는 다음 스크린 샷과 같이 양식의 유효성을 검사하고 오류를 표시합니다.
데이터가 클라이언트 및 서버 측 유효성 검사를 통과하면 직원 데이터가 데이터베이스에 저장되고 페이지가 목록 페이지로 리디렉션됩니다.
파일 업로드는 양식 프로그래밍에서 가장 일반적으로 사용되는 기능 중 하나입니다. FuelPHP는 특별한 클래스를 제공합니다.Upload파일 업로드를 처리합니다. 이 장에서는 업로드 클래스를 사용하여 파일을 업로드하는 방법을 알아 보겠습니다.
구성
업로드 클래스는 별도의 구성 파일을 사용하여 구성 할 수 있습니다. fuel/app/config/upload.php. 중요한 구성 항목은 다음과 같습니다.
max_size− 업로드 할 파일의 최대 크기를 설정합니다. "0"은 무제한 업로드 크기를 나타냅니다.
ext_whitelist − 허용되는 파일 확장자 설정
ext_blacklist − 허용되지 않는 파일 확장자 설정
type_whitelist− 허용되는 파일 유형을 설정합니다. 예를 들어 "text / plain"MIME 유형의 경우 "text"
type_blacklist − 허용되지 않는 파일 유형 설정
mime_whitelist− 허용되는 MIME 파일 유형을 설정합니다. 예 : "text / plain"
mime_blacklist − 허용되지 않는 MIME 파일 유형 설정
prefix − 업로드 된 파일을 서버에 저장하는 동안 파일 이름의 접두사 문자열
suffix − 업로드 된 파일을 서버에 저장하는 동안 파일 이름에 접미사 문자열
extension − 설정할 업로드 파일의 확장자
create_path − 파일 경로 생성 여부 (사용할 수없는 경우)
overwrite − 업로드 된 파일 저장시 기존 파일 덮어 쓰기 여부
auto_rename − 업로드 된 파일을 저장하는 동안 시퀀스 번호를 추가하여 파일 이름을 바꿀지 여부
randomize − 업로드 된 파일을 저장할 임의의 32 자 이름 생성 여부
업로드 방법
업로드 클래스는 사용자가 업로드 한 파일을 처리하고 저장하는 옵션을 제공합니다. 처리 된 모든 파일 (저장 전)은 결과 배열에 다음 정보를 포함합니다.
field − 양식 필드의 이름
name − 업로드 된 파일의 이름
type − 브라우저에서 정의한 파일 유형
mimetype − 업로드 클래스에 정의 된 파일 유형
file − 업로드 된 파일의 임시 위치의 정규화 된 이름
filename − 업로드 된 파일의 파일 이름
extension − 업로드 된 파일의 확장자
size − 업로드 된 파일의 크기 (바이트)
errors − 오류 코드 및 메시지가있는 오류 배열
error − 업로드 실패 이유와 함께 배열 오류를 설정할지 여부 (업로드 실패시)
파일이 서버에 저장되면 결과 배열에도 다음 정보가 포함됩니다.
saved_to − 업로드 된 파일이 저장된 완전한 경로
saved_as − 저장된 파일의 이름
errors − 업데이트 된 오류 배열
이제 Upload 클래스의 방법을 살펴 보겠습니다.
is_valid
is_valid는 사용자가 유효한 파일을 업로드 한 경우 true를 반환합니다.
// do we have any uploaded files to save?
if (Upload::is_valid()) {
// process
}
get_files
get_files는 업로드 된 모든 파일을 다차원 배열로 반환합니다. 양식 파일 입력의 색인 / 이름이 지정되면 지정된 파일 입력과 관련된 업로드 된 파일 만 반환됩니다.
foreach(Upload::get_files() as $file) {
// do something with the file info
}
if ( Upload::get_files(0)) {
// do something
}
get_errors
get_errors는 하나 이상의 파일 업로드에 실패한 경우 오류 배열을 반환합니다. 양식 파일 입력 이름의 색인 / 이름을 지정하면 지정된 파일 입력과 관련된 오류 만 반환합니다.
foreach(Upload::get_errors() as $file) {
// do something with the file info
}
if (Upload::get_errors('myimage')) {
// do something
}
방법
프로세스는 업로드 된 파일에 대한 정보를 수집하는 실제 프로세스를 의미합니다. 어레이를 사용하여 새로운 사용자 지정 구성을 제공 할 수 있습니다. 구성이 지정되지 않은 경우 fuel / app / config / upload.php에 정의 된 구성을 사용합니다.
Upload::process (array(
'auto_rename' => false,
'overwrite' => true
));
저장
저장은 유효한 모든 파일을 적절한 위치에 저장하는 실제 프로세스를 의미합니다. 특정 항목 만 저장하도록 색인을 지정할 수 있습니다.
Upload::save();
Upload::save(0);
Upload::save(0, 3);
작업 예
직원 샘플에 새 컨트롤러 Controller_Upload를 만들어 업로드 기능을 테스트 해 보겠습니다.
Step 1 − 파일 생성, fuel/app/classes/controller/upload.php. 업로드 컨트롤러를 만듭니다.
<?php
class Controller_Upload extends Controller {
}
Step 2 − 새로운 액션 get_upload를 생성합니다.
<?php
class Controller_Upload extends Controller {
public function get_index() {
return \View::forge("upload/index");
}
}
Step 3 − 생성 된 작업에 대한 새보기를 생성합니다.
<!DOCTYPE html>
<html>
<body>
<form action = "/upload/index" method = "post" enctype = "multipart/form-data">
Select image to upload:
<input type = "file" name = "fileToUpload" id = "fileToUpload">
<input type = "submit" value = "Upload Image" name = "submit">
</form>
</body>
</html>
Step 4 − 업로드 된 파일을 처리 할 새 작업 post_action을 생성합니다.
<?php
class Controller_Upload extends Controller {
public function get_index() {
return \View::forge("upload/index");
}
public function post_index(){
$config = array( 'path' => DOCROOT.'files', 'randomize' => true, 'ext_whitelist' => array('img', 'jpg', 'jpeg', 'gif', 'png'), ); Upload::process($config);
// if there are any valid files
if (Upload::is_valid()) {
Upload::save();
echo "success";
} else {
// and process any errors
foreach (Upload::get_errors() as $file) { echo var_dump($file);
}
}
}
}
마지막으로 URL을 요청하여 애플리케이션을 실행하고 http://localhost:8080/upload/index 파일 업로드를 시도합니다.
결과
AJAX는 웹 프로그래밍의 최신 기술입니다. 페이지를 새로 고치지 않고 웹 페이지에서 비동기 적으로 데이터를 보내고받는 옵션을 제공합니다. 이 장에서 FuelPHP AJAX 프로그래밍에 대해 알아 보겠습니다.
FuelPHP 프레임 워크는 요청 유형이 AJAX인지 여부를 식별하는 옵션을 제공합니다. 입력 클래스에는 메서드가 있습니다.is_ajax()이 목적을 위해. AJAX 요청이 있으면Input::is_ajax 메서드 반환 true, 그렇지 않으면 false.
이 메소드는 서버 측에서 AJAX 요청을 적절하게 처리하는 데 사용됩니다.
if (Input::is_ajax()) {
// Ajax request
} else {
// Normal request
}
우리는 사용할 수 있습니다 json_encodeJSON 응답을 반환합니다. 이 두 가지 방법을 결합하여 간단하고 깨끗한 AJAX 기반 웹 애플리케이션을 만들 수 있습니다.
작업 예
새 페이지를 추가하겠습니다. ajax/index 직원 응용 프로그램에서 직원 정보를 비동기 적으로 가져 오십시오.
Step 1 − fuel / app / classes / controller / ajax.php에서 새 컨트롤러 Controller_Ajax를 생성합니다.
<?php
class Controller_Ajax extends Controller {
}
Step 2− 다음과 같이 새로운 액션 action_index 를 생성합니다.
<?php
class Controller_Ajax extends Controller {
public function action_index() {
$emps = model_employee::find('all'); $data = array();
$i = 0; foreach($emps as $emp) { $data[$i] = array(); $data[$i]['name'] = $emp['name'];
$data[$i]['age'] = $emp['age']; $i = $i + 1; } if(\Input::is_ajax()) { echo json_encode($data);
} else {
return \View::forge("ajax/index");
}
}
}
여기에서 요청이 AJAX 인 경우 학생 정보를 가져 와서 JSON으로 인코딩 한 다음 반환합니다. 그렇지 않으면 해당 뷰를 렌더링합니다.
Step 3 − 해당 뷰 파일 생성, fuel/app/views/ajax/index.php 다음과 같이.
<html>
<head>
<script language = "javascript" src = "/assets/js/jquery-3.2.1.min.js"></script>
<style>
.table { border-collapse: collapse; }
.table th, td {
border-bottom: 1px solid #ddd;
width: 250px;
text-align: left;
align: left;
}
</style>
</head>
<body>
<a id = "loademployee" href = "#">Load employee information</a>
</br>
</br>
<table class = "table">
<tbody id = "employee">
</tbody>
</table>
<script language = "javascript">
$(document).ready(function() { $("#loademployee").on("click", function(event) {
$.ajax ({ url: '/ajax/index', type: 'POST', dataType: 'json', async: true, success: function(data, status) { var e = $('<tr><th>Name</th><th>Age</th></tr>');
$('#employee').html(''); $('#employee').append(e);
for(i = 0; i < data.length; i++) {
employee = data[i];
var e = $('<tr><td id = "name"></td><td id = "age"></td></tr>'); $('#name', e).html(employee['name']);
$('#age', e).html(employee['age']); $('#employee').append(e);
}
},
error : function(xhr, textStatus, errorThrown) {
alert('Ajax request failed.');
}
});
});
});
</script>
</body>
</html>
여기에서는 AJAX 호출을 사용하여 직원 정보를로드하기 위해 앵커 태그 (id : loademployee)를 생성했습니다. AJAX 호출은 JQuery를 사용하여 수행됩니다. 사용자가 클릭하면 loademployee 태그에 연결된 이벤트가 활성화됩니다. 그런 다음 AJAX 호출을 사용하여 직원 정보를 가져오고 필요한 HTML 코드를 동적으로 생성합니다.
Step 4 − 응용 프로그램을 실행하십시오.
마지막으로 애플리케이션을 실행하고 http://localhost:8000/ajax/index 직원 정보로드 앵커 탭을 클릭합니다.
결과
FuelPHP는 다음을 사용하여 동일한 애플리케이션 내에서 작업을 요청하는 탁월한 기능을 제공합니다. Request수업. 이를 HMVC 요청이라고합니다. 컨트롤러 로직을 재사용 할 수 있습니다.
HMVC 요청 생성
HMVC 요청 생성은 필요한 URL로 요청 객체를 생성하고 다음과 같이 execute 메소드를 호출하는 것만 큼 간단합니다.
$list = Request::forge('employee/list/')->execute(); echo $list;
$employee = Request::forge('employee/show/1')->execute(array('id' => '1')); echo $employee;
작업 예
HMVC 기능을 테스트하기 위해 새 컨트롤러 인 Controller_HMVC 를 만들어 보겠습니다 . 파일 생성,fuel/app/classes/controller/hmvc.php 다음 코드를 넣으십시오.
<?php
class Controller_HMVC extends Controller {
public function action_index() {
echo Request::forge('employee/list')->execute();
}
}
여기에서는 HMVC 요청을 통해 직원 / 목록 페이지를 호출하여 결과를 보여주었습니다.
결과
테마는 응용 프로그램의 다양한 모양과 느낌을 활성화하는 데 사용됩니다. 사용자 / 개발자가 응용 프로그램의 기능을 방해하지 않고 응용 프로그램의 모양과 느낌을 변경할 수있는 옵션을 제공합니다. 응용 프로그램에는 하나 이상의 테마가있을 수 있습니다. 각 테마는 자체 폴더에 있습니다. 이 장에서 테마를 만드는 방법에 대해 알아 보겠습니다.
테마 구성
FuelPHP는 테마에 대한 별도의 구성 파일을 제공합니다. fuel/app/config/themes.php. 모든 테마 관련 설정은이 파일에서 구성됩니다. 주요 테마 설정 중 일부는 다음과 같습니다.
active − 활성 테마의 이름
fallback − 활성 테마를 찾을 수없는 경우 대체 테마의 이름
paths − 테마를 검색하고 찾을 경로 배열
assets_folder− 일반적으로 자산은 웹을 통해 액세스 할 수 있도록 DOCPATH 내에 있어야합니다. DOCPATH 내의 테마에 대한 자산 폴더를 나타냅니다.
view_ext − 테마보기 파일 확장
info_file_name − 테마에 대한 확장 정보가있는 파일
require_info_file − 테마 정보 파일 info_file_name 필요 여부
use_modules − 현재 모듈 사용 여부
테마 파일의 간단한 설정은 다음과 같습니다.
<?php
return array (
'active' => 'tpthemes',
'fallback' => 'tpthemes',
'paths' => array (
APPPATH.'themes',
),
'assets_folder' => 'assets',
'view_ext' => '.html',
'require_info_file' => false,
'info_file_name' => 'themeinfo.php',
'use_modules' => false,
);
여기에서 설정했습니다.
- 활성 및 대체 테마의 이름 (tpthemes)
- fuel / app / themes /와 같은 테마 폴더의 경로
- 자산 폴더의 경로 (/ public / assets / tpthemes /)
테마 클래스
구성이 완료되면 FuelPHP에서 제공하는 Theme 클래스를 사용하여 테마의 기능을 수행 할 수 있습니다. 이 장의 Theme 클래스에서 사용할 수있는 메서드에 대해 알려주십시오.
예
인스턴스 메서드를 사용하면 새 테마를 만들 수 있습니다. 다음 두 가지 매개 변수가 있습니다.
$name − 테마 이름 (선택 사항)
$config − 테마 구성 배열 (구성 섹션에서 본 것과 동일)
두 매개 변수는 모두 선택 사항입니다. 매개 변수를 지정하지 않으면 구성 파일에서 기본 테마를 가져 오려고합니다. 테마 이름이 지정되면 구성 파일에서 다른 설정을 가져 오려고합니다. 구성도 지정하면 구성 파일에서 설정하는 대신 사용자 지정 설정을 사용합니다.
$theme = \Theme::instance(); $theme = \Theme::instance('tpthemes');
$theme = \Theme::instance ('mytheme', array (
'active' => 'mytheme', 'view_ext' => '.php'));
단조 공장
forge는 구성 배열 만 있다는 점을 제외하고 인스턴스와 유사합니다.
$theme = \Theme::forge (array(
'active' => 'tpthemes',
'fallback' => 'tpthemes',
'view_ext' => '.php',
));
전망
보기 방법은 View::forge()백그라운드에서. 두 API는 비슷하지만 view 메서드는 fuel / app / views / 폴더 대신 themes 폴더 인 fuel / app / themes / tpthemes /에서 뷰 파일을 검색합니다.
$theme = \Theme::instance(); $view = $theme->view('template/index');
// *fuel/app/themes/tpthemes/template/index.php
증여자
발표자 방법은 Presenter::forge()백그라운드에서. 발표자 방법이 fuel / app / views / 폴더 대신 fuel / app / themes / tpthemes / 테마 폴더에서보기 파일을 검색한다는 점을 제외하면 두 API는 비슷합니다.
$theme = \Theme::instance();
$presenter = $theme->presenter('template/index');
asset_path
asset_path 메소드는 현재 선택된 테마와 관련된 요청 된 자산의 경로를 반환합니다.
$theme = \Theme::instance(); // public/assets/tpthemes/css/style.css $style = \Html::css($theme->asset_path('css/style.css'));
add_path
add_path 메소드는 런타임에 테마 경로를 추가 할 수 있습니다.
$theme = \Theme::instance();
$theme->add_path(DOCROOT.'newthemes');
add_paths
add_paths 메소드는 런타임에 여러 테마 경로를 추가 할 수 있습니다.
$theme = \Theme::instance();
$theme->add_path(DOCROOT.'newthemes');
유효한
활성 방법을 사용하면 활성 테마를 설정할 수 있습니다.
$theme = \Theme::instance();
$active = $theme->active('newtheme');
폴백
fallback 메서드를 사용하면 대체 테마를 설정할 수 있습니다.
$theme = \Theme::instance(); $fallback = $theme->fallback('custom');
get_template
get_template 메소드는 현재로드 된 테마 템플릿의 View 인스턴스를 반환합니다.
$theme = \Theme::instance();
$theme->get_template()->set('body', 'Theme can change the look and feel of your app');
set_template
set_template 메소드는 페이지의 테마 템플릿을 설정할 수 있습니다.
$theme = \Theme::instance();
$theme->set_template('layouts/index')->set('body', 'set theme template');
찾기
find는 테마 경로가 발견되면 true를 반환하고 그렇지 않으면 false를 반환합니다.
$theme = \Theme::instance();
$path = $theme->find('newtheme')
모두
all 메소드는 모든 테마 경로에있는 모든 테마의 배열을 반환합니다.
$theme = \Theme::instance(); $themes = $theme->all();
정보를 얻다
get_info 메서드는 테마 정보 배열에서 특정 변수를 반환합니다. 테마를 지정하지 않으면 활성 테마의 정보 배열이 사용됩니다.
$theme = \Theme::instance();
$var = $theme->get_info('color', 'green', 'newtheme');
여기서 get 메소드는 'newtheme'에 정의되어 있습니다. 정의되지 않은 경우 기본 색상으로 '녹색'을 사용합니다.
set_info
set_info 메소드는 활성 또는 대체 테마에서 변수를 설정합니다.
$theme->set_info('color', 'green', 'fallback');
set_partial
set_partial 메소드를 사용하면 페이지 템플릿의 명명 된 섹션에 대한 뷰 부분을 설정할 수 있습니다. 일반적으로 HMVC 호출을 통해 수행됩니다.
$theme = \Theme::instance();
$theme->set_template('layouts/homepage'); $theme->set_partial('navbar', 'homepage/navbar');
get_partial
get_partial 메소드를 사용하면 페이지 템플릿의 명명 된 섹션에서 이전에 설정된 부분의 뷰 인스턴스를 가져올 수 있습니다.
$theme = \Theme::instance(); $theme->set_partial('sidebar', 'partials/menu');
$theme->get_partial('sidebar', 'partials/menu')->set('class', 'menu green');
작업 예
직원 애플리케이션에 테마 지원을 추가하겠습니다.
Step 1 − 다음 내용으로 새 테마 구성 파일 인 fuel / app / config / theme.php를 추가하십시오.
<?php
return array (
'active' => 'tpthemes',
'fallback' => 'tpthemes',
'paths' => array (APPPATH.'themes', ),
'assets_folder' => 'assets',
'view_ext' => '.html',
'require_info_file' => false,
'info_file_name' => 'themeinfo.php',
'use_modules' => false,
);
Step 2 − tpthemes 테마에 대한 새 자산 폴더 public / assets / tpthemes / css를 추가합니다.
cd /go/to/app/root/path
mkdir -p public/assets/tpthemes/css
Step 3 − 최신 부트 스트랩을 다운로드하고 bootstrap.min.css를 public / assets / tpthemes / css 아래에 둡니다.
Step 4 − fuel / app / themes 폴더에 새 폴더 tpthemes를 추가합니다.
cd /go/to/app/root/path
mkdir -p fuel/app/themes/tpthemes
Step 5 − fuel / app / themes / tpthemes / layout / 아래에 새 레이아웃 템플릿 인 bootstrap.html을 추가하고 다음 코드를 추가합니다.
<!DOCTYPE html>
<html lang = "en">
<head>
<title>Theme example</title>
<meta charset = "utf-8">
<meta name = "viewport" content = "width = device-width, initial-scale = 1">
<!-- Bootstrap core CSS -->
<?php echo \Theme::instance()->asset->css('bootstrap.min.css'); ?>
</head>
<body>
<?php echo $header; ?>
<div class = "container">
<div class = "row">
<div class = "col-sm-12">
<?php echo $content; ?>
</div>
</div>
</div>
</body>
</html>
여기서는 부트 스트랩 파일의 경로를 얻기 위해 테마 인스턴스와 자산 메소드를 사용했습니다. 헤더와 내용이라는 두 가지 변수를 정의했습니다.header 헤더 세부 사항을 동적으로 설정하도록 정의됩니다. content 페이지의 실제 콘텐츠를 동적으로 설정하도록 정의됩니다.
Step 6 − 다음과 같이 fuel / app / themes / tpthemes / partials에 새 헤더 템플릿 인 header.php를 추가합니다.
<div class = "jumbotron text-center">
<h1>Theme support in fuelphp</h1>
<p>bootstrap based template</p>
</div>
Step 7 − 새 컨트롤러 생성, ThemeSample fuel / app / classes / controller / themesample.php 및 action 다음과 같이 action_index에서.
<?php
class Controller_ThemeSample extends \Controller {
public function before() {
$this->theme = \Theme::instance();
$this->theme->set_template('layouts/bootstrap'); $header = $this->theme->view('partials/header'); $this->theme->get_template()->set('header', $header); } public function action_index() { $content = $this->theme ->view('themesample/index') ->set('message', 'This data comes from action page'); $this->theme
->get_template()
->set('content', $content); } public function after($response) {
if (empty($response) or ! $response instanceof Response) {
$response = \Response::forge(\Theme::instance()->render()); } return parent::after($response);
}
}
여기서 우리는 before 과 after 방법을 사용하여 테마 초기화를 수행하는 방법 Theme수업. 사용되는 메소드 중 일부는 instance, get_template, set_template 및 view입니다.
Step 8 − 마지막으로 다음과 같이 fuel / app / themes / tpthemes / themesample에 index.php 인덱스 작업에 대한 뷰를 추가합니다.
<p>The data comes from *fuel/app/themes/tpthemes/themesample/index.html* file.</p>
<p>
<?php echo $message; ?>
</p>
여기서는 컨트롤러에서 동적으로 설정해야하는 하나의 변수 인 message를 정의했습니다.
새로운 테마를 만들었습니다. tpthemes 그리고 그것을 사용했습니다 ThemeSample제어 장치. 이제 URL http : // localhost : 8080 / themesample / index를 요청하여 결과를 확인하겠습니다. 결과는 다음과 같습니다.
모듈은 블로그, 앨범, 채팅 등과 같은 재사용 가능한 웹 기능을 작성하는 좋은 방법입니다. 모듈은 웹 애플리케이션의 다른 코드를 방해하지 않습니다. 자체 폴더에 있으며 자동으로 기능을 제공합니다. 모듈은 그룹화, 구성 및 특수 폴더에 배치된다는 점을 제외하고는 단순히 동일한 컨트롤러, 모델 및보기입니다. 일반적으로 모듈은 일반적으로 fuel / app / modules에있는 modules라는 애플리케이션의 하위 디렉토리에 있습니다.
모듈 구성
메인 애플리케이션 구성 파일 인 fuel / app / config / config.php에서 다음과 같이 모듈 경로를 정의 할 수 있습니다.
'module_paths' => array (
path/to.’modules'.DS, // path to application modules
path/to.’..’.DS.'globalmods'.DS // path to our global modules
),
모듈 네임 스페이스
FuelPHP에서 모든 모듈에는 자체 PHP 네임 스페이스가 있습니다. 별도의 네임 스페이스를 설정하면 이름 충돌이 수정됩니다. 예를 들어 EmployeeModule 네임 스페이스 아래에 직원 모듈 을 다음과 같이 설정할 수 있습니다 .
<?php
namespace Employeemodule;
class Controller_Employee {
//code here
}
모듈의 이름은 모듈의 폴더 이름과 동일해야합니다.
모듈 구조
구성에 정의 된 폴더 이름을 생성하여 모듈을 생성 할 수 있습니다. 폴더 이름은 모듈의 이름과 모듈에있는 클래스의 네임 스페이스 이름을 결정합니다.
모듈의 구조는 다음과 같습니다.
- classes
- controller
- model
- view
- config
- lang
- tasks
- views
모듈은 자체 구성 파일을 가질 수 있습니다. 라우팅 설정에 매우 유용하며 애플리케이션의 원래 구성을 방해하지 않습니다. 또 다른 중요한 개념은 다음과 같이 always_load 구성 섹션에서 모듈을로드하여 모듈 클래스를 재사용 할 수 있다는 것입니다.
'always_load => array (
'modules' => array('employeemodule'),
),
또한 다음과 같은 구성없이 모듈을 즉시로드하여 사용할 수 있습니다.
Module::load('employeemodule');
\Employeemodule\Myclass::mymethod('params');
패키지는 코드 재사용의 모듈과 유사하지만 다음과 같은 점이 다릅니다.
- 웹 URL에 매핑되지 않습니다.
- HMVC 요청을 통해 접근 할 수 없습니다.
간단히 말해서, 패키지는 블로그, 앨범 등과 같은 직접적인 웹 기능이 아닙니다. 대신 이메일 처리, 문서 생성, 차트 생성, 인증 등과 같이 함께 그룹화 된 기능의 라이브러리로, 웹의 빠른 개발을 지원합니다. 신청.
패키지 생성
패키지를 생성하려면 먼저 다음과 같이 지정된 소스 코드를 정렬해야합니다.
/fuel
/packages
/package (root directory of package)
/bootstrap.php
/classes
/our.php
/classes.php
/here.php
/config
/config.php
/and_so_on
패키지 구조에는 두 개의 패키지 특정 파일, config.php 및 bootstrap.php 파일이 있습니다. 구성 파일의 목적은 기본 응용 프로그램을 방해하지 않고 패키지 폴더 자체 아래에 패키지 구성을 그룹화하는 것입니다. 부트 스트랩 파일의 목적은 오토로더가 올바르게로드하도록 네임 스페이스를 설정하는 것입니다.
네임 스페이스를 설정하는 방법은 다음과 같습니다.
Autoloader::add_namespace('Mypackage', __DIR__.'/classes/');
Autoloader::add_core_namespace('Mypackage');
Autoloader::add_core_namespace('Mypackage', true);
Autoloader::add_classes (array(
'Mypackage\\Classname' => __DIR__.'/classes/classname.php',
'Mypackage\\Anotherclass' => __DIR__.'/classes/anotherclass.php',
));
부트 스트랩 파일이 제대로 구성되고 패키지가 애플리케이션에로드되면 다음과 같이 사용할 수 있습니다.
$instance = new Myclass;
$instance = new Mynamespace\Myclass;
패키지 설치
패키지는 일반적으로 fuel / packages 디렉토리에 있습니다. 기본적으로 다음 패키지가 설치됩니다.
auth − 인증 패키지
email − 이메일 패키지
oil − 연료의 명령, 오일 패키지
orm − ORM 패키지
parser − Markdown 파서 패키지
새 패키지를 설치하려면 다음 두 가지 옵션이 있습니다.
Option 1 − 수동 설치-다운로드 및 설치
패키지를 수동으로 설치하려면 먼저 작성자의 웹 사이트에서 패키지를 다운로드하십시오. 포장을 풀고 아래에 놓습니다.fuel/packages/ 폴더.
Option 2 − 오일 명령을 이용한 자동 방법
FuelPHP는 github에서 호스팅되는 패키지를 자동으로 설치하는 방법을 제공합니다. 다음 명령을 사용하여 mytestpackage 패키지를 설치합니다.
php oil package install mytestpackage
git 클라이언트를 사용하여 패키지 소스 코드를 복제하고 fuel / packages 폴더로 이동합니다. git 클라이언트를 사용할 수없는 경우 –direct 명령 인수를 사용하여 다음과 같이 패키지를 다운로드하고 설치하도록 명령을 지시 할 수 있습니다.
php oil package install mytestpackage --direct
패키지 사용
패키지는 애플리케이션에로드되면 애플리케이션에서 사용할 수 있습니다. 패키지를 응용 프로그램에로드하는 방법에는 두 가지가 있습니다.
Option 1 − 패키지 클래스를 통해
FuelPHP는 클래스를 제공합니다. Package load, unload 및 loaded 메소드를 통해 각각 패키지를로드, 언로드 및 확인합니다. load메소드에는 두 개의 매개 변수가 있습니다. 첫 번째 매개 변수는$package 패키지 이름과 두 번째 매개 변수입니다. path패키지의 경로입니다. 두 번째 매개 변수는 패키지가 다음 위치에 설치된 경우 선택 사항입니다.fuel/packages 폴더.
// load the orm package
Package::load('orm');
// load the parser package from a specific directory
Package::load('parser', '/path/to/packages/dir/');
// load the non-existent package
Package::load('awesome'); // Throws a PackageNotFoundException
Option 2 − 구성 파일을 통해
패키지를 영구적으로로드하려면 아래에 패키지를 추가하십시오. always_load 기본 구성 파일의 구성 항목, fuel/app/config/config.php. 이메일 패키지를로드하려면 다음 구문을 사용하십시오.
'always_load' => array (
'packages' => array (
'email',
),
),
패키지가 애플리케이션에로드되면 다음과 같이 사용할 수 있습니다.
$instance = new Myclass; $instance = new Mynamespace\Myclass;
Cookie클라이언트 측 데이터 스토리지를 제공하며 소량의 데이터 만 지원합니다. 일반적으로 도메인 당 2KB이며 브라우저에 따라 다릅니다.Session서버 측 데이터 스토리지를 제공하며 많은 양의 데이터를 지원합니다. FuelPHP 웹 애플리케이션에서 쿠키와 세션을 생성하는 방법을 살펴 보겠습니다.
쿠키
FuelPHP는 Cookie클래스를 사용하여 쿠키 항목을 만듭니다. 쿠키 클래스는 쿠키를 생성, 할당 및 삭제하는 데 사용됩니다.
쿠키 구성
Cookie 클래스는 fuel / app / config / config.php에있는 메인 애플리케이션 구성 파일을 통해 전역 적으로 구성 할 수 있습니다. 다음과 같이 정의됩니다.
'cookie' => array (
//Number of seconds before the cookie expires
'expiration' => 0,
//Restrict the path that the cookie is available to
'path' => '/',
//Restrict the domain that the cookie is available to
'domain' => null,
// Only transmit cookies over secure connections
'secure' => false,
// Only transmit cookies over HTTP, disabling Javascript access
'http_only' => false,
),
행동 양식
Cookie 클래스는 쿠키 항목을 생성, 액세스 및 삭제하는 메서드를 제공합니다. 그들은 다음과 같습니다-
세트()
set 메서드는 Cookie 변수를 만드는 데 사용됩니다. 다음 인수가 포함됩니다.
$name − $ _COOKIE 배열의 키.
$value − 쿠키의 가치.
$expiration − 쿠키가 지속되어야하는 시간 (초).
$path − 쿠키를 사용할 수있는 서버의 경로.
$domain − 쿠키를 사용할 수있는 도메인.
$secure − 보안 연결을 통해서만 쿠키를 전송하려면 true로 설정하십시오.
$httponly − HTTP를 통한 쿠키 전송 만 허용하고 JavaScript 액세스를 비활성화합니다.
Cookie::set('theme', 'green');
가져 오기()
get 메소드는 Cookie 변수를 읽는 데 사용됩니다. 다음 인수가 포함됩니다.
$name − $ _COOKIE 배열의 키.
$value − $ _COOKIE 배열에서 키를 사용할 수없는 경우 반환 할 값.
Cookie::get('theme');
지우다()
delete 메소드는 Cookie 변수를 삭제하는 데 사용됩니다. 다음 인수가 포함됩니다.
$name − $ _COOKIE 배열의 키.
$value − 쿠키의 가치.
$domain − 쿠키를 사용할 수있는 도메인.
$secure − 보안 연결을 통해서만 쿠키를 전송하려면 true로 설정하십시오.
$httponly − HTTP를 통한 쿠키 전송 만 허용하고 JavaScript 액세스를 비활성화합니다.
Cookie::delete('theme');
세션
FuelPHP는 수업을 제공합니다. Session 응용 프로그램의 상태를 유지합니다.
세션 구성
세션 클래스는 특수 구성 파일을 통해 구성 할 수 있습니다. fuel/core/config/session.php. 중요한 구성 항목 중 일부는 다음과 같습니다.
auto_initialize − 세션을 자동으로 초기화합니다.
driver− 세션 드라이버의 이름. 세션은 드라이버를 사용하여 구현되며 가능한 옵션은 cookie, db, memcached, redis 및 file입니다. 기본 드라이버는 쿠키입니다.
match_ip − 클라이언트 IP를 확인하십시오.
match_ua − 클라이언트 사용자 에이전트를 확인하십시오.
expiration_time − 세션 시간 초과 값 (초).
rotation_time − 세션을 갱신 할 시간.
세션 방법
세션 클래스는 세션 데이터를 조작하는 방법을 제공합니다. 다음과 같습니다.
예()
그만큼 instance 메서드는 이름으로 식별되는 기본 또는 특정 인스턴스를 반환합니다.
$session = Session::instance(); // default instance $session = Session::instance('myseesion'); // specific instance
세트()
그만큼 set 메서드는 세션 변수를 할당하는 데 사용됩니다.
Session::set('userid', $userid);
가져 오기()
그만큼 get 메소드를 사용하면 세션에서 저장된 변수를 검색 할 수 있습니다.
$userid = Session::get('userid');
지우다()
그만큼 delete 메소드를 사용하면 저장된 세션 변수를 삭제할 수 있습니다.
Session::delete('userid');
창조하다()
그만큼 create메서드를 사용하면 새 세션을 만들 수 있습니다. 세션이 이미있는 경우 삭제되고 새 세션이 생성됩니다.
Session::create();
멸하다()
그만큼 destroy 메소드는 기존 세션을 파괴하는 데 사용됩니다.
Session::destroy();
읽다()
그만큼 read 메서드를 사용하면 세션을 읽을 수 있습니다.
Session::read();
쓰다()
그만큼 write 메소드를 사용하면 세션을 작성할 수 있습니다.
Session::write();
키()
그만큼 key메소드를 사용하면 세션 키의 요소를 검색 할 수 있습니다. 키 값은 고유합니다.
$session_id = Session::key('session_id');
안 event프로그램 자체에서 처리 할 수있는 프로그램이 인식하는 조치 또는 발생입니다. 예를 들어, my_fuel_event라는 이름의 액션 또는 이벤트를 정의한 다음 이벤트 my_fuel_event가 호출 될 때마다 작업을 수행 할 수 있습니다. FuelPHP는 수업을 제공합니다.Event 응용 프로그램의 이벤트에 대해 작업합니다.
시스템 이벤트
FuelPHP는 정의 된 이벤트가 애플리케이션에 의해 호출되거나 실행될 때마다 작업을 수행 할 수있는 일부 이벤트를 정의했습니다. 이 도움말은 FuelPHP의 핵심 코드 파일을 변경하지 않고 FuelPHP의 동작을 변경하는 것입니다. 미리 정의 된 이벤트는 다음과 같습니다.
app_created −이 이벤트는 FuelPHP 프레임 워크가 초기화 된 후에 트리거됩니다.
request_created −이 이벤트는 새로운 요청 객체가 위조 된 후에 트리거됩니다.
request_started −이 이벤트는 요청 실행이 요청 될 때 트리거됩니다.
controller_started −이 이벤트는 컨트롤러 before () 메서드가 호출되기 전에 트리거됩니다.
controller_finished −이 이벤트는 컨트롤러 after () 메서드가 호출되고 응답이 수신 된 후에 트리거됩니다.
response_created −이 이벤트는 새 응답 개체가 위조 된 후에 트리거됩니다.
request_finished −이 이벤트는 요청 실행이 완료되고 응답이 수신되면 트리거됩니다.
shutdown −이 이벤트는 메인 요청이 처리되고 출력이 전송 된 후에 트리거됩니다.
특수 구성 파일에서 이벤트를 처리 할 수 있습니다. fuel/app/config/events.php 다음과 같이-
<?php
return array (
'fuelphp' => array (
'app_created' => function() {
// After FuelPHP initialised
},
'request_created' => function() {
// After Request forged
},
'request_started' => function() {
// Request is requested
},
'controller_started' => function() {
// Before controllers before() method called
},
'controller_finished' => function() {
// After controllers after() method called
},
'response_created' => function() {
// After Response forged
},
'request_finished' => function() {
// Request is complete and Response received
},
'shutdown' => function() {
// Output has been send out
},
),
);
이벤트 방법
이벤트 클래스는 이벤트를 등록, 등록 취소 및 실행하는 메서드를 제공합니다. 다음과 같습니다.
레지스터()
register 메서드를 사용하면 트리거 메서드가 호출 될 때 실행될 개체를 파일에서 등록 할 수 있습니다.
$my_event_code = function() {
echo 'my event';
}
Event::register('my_event', $my_event_code);
unregister ()
unregister 메서드를 사용하면 트리거 메서드가 호출 될 때 실행될 개체를 파일에서 등록 해제 할 수 있습니다.
Event::unregister('my_event', $my_event_code);
방아쇠()
trigger 메서드는 register 메서드를 통해 연결된 콜백을 트리거하거나 활성화하는 데 사용됩니다.
Event::trigger('my_event');
has_events ()
has_events 메소드를 사용할 수 있으므로 등록 된 특정 이벤트에 트리거가 있는지 확인할 수 있습니다.
Event::has_events('my_event');
단조 공장()
Forge는 새로운 이벤트 객체를 반환합니다.
$event = Event::forge();
예()
인스턴스는 새로운 이벤트 객체 싱글 톤을 반환합니다.
$event = Event::instance('event_instance');
이메일 기능은 웹 프레임 워크에서 가장 많이 요청되는 기능입니다. FuelPHP는 패키지로 번들 된 우아한 이메일 클래스를 제공합니다. 여러 첨부 파일이있는 고급 서식있는 텍스트 이메일뿐만 아니라 간단한 일반 텍스트 이메일을 보내는 데 사용됩니다. 일반 텍스트 메일, HTML 메일, 첨부 파일 및 인라인 첨부 파일과 같은 기능을 지원합니다.
구성
애플리케이션에서 이메일 기능을 활성화하려면 아래의 기본 구성 파일 인 fuel / app / config / config.php에 지정된대로 이메일 패키지를로드하기 만하면됩니다.
'always_load' => array (
'packages' => array (
'email',
),
),
또 다른 옵션은 다음과 같이 컨트롤러 자체 인 이메일 패키지를로드하는 것입니다.
\Package::load('email');
이메일 설정은 기본 구성 파일에서 수행 할 수 있으며 몇 가지 중요한 옵션은 다음과 같습니다.
driver − smtp와 같은 이메일 드라이버
is_html − HTML 콘텐츠로 메일 발송 여부
priority − 이메일 우선 순위
smtp.host − SMTP 서버 호스트
smtp.port − SMTP 서버 포트
smtp.username − SMTP 서버 사용자 이름
smtp.password − SMTP 서버 비밀번호
smtp.timeout − SMTP 시간 초과
smtp.starttls − SMTP 서버에 STARTTLS 명령이 필요한지 여부
이메일 API
다음은 이메일 및 이메일 드라이버 클래스에서 제공하는 API입니다.
단조 공장
목적 : 이메일 드라이버의 인스턴스를 생성합니다. 수신 한 구성 또는 입력을 기반으로 드라이버를 생성합니다. 이메일 드라이버는 메일을 작성하고 보내는 기능을 제공합니다. 가능한 이메일 드라이버 중 일부는 다음과 같습니다.smtp, sendmail, mailgun, 과 mandrill.
Parameter − 없음 또는 구성 세부 정보 배열
Returns − Email_Driver 객체를 반환합니다.
예를 들면
$email = \Email::forge(); $email = \Email::forge (array(
'driver' => 'smtp',
));
몸
Purpose − 메시지 본문을 설정하려면
Parameter − $ body-메시지 본문
Returns − 현재 인스턴스를 반환
예를 들면
$email = \Email::forge();
$email->body('Body message'); //or pass it a View $email->body(\View::forge('my/view', $data);
alt_body
Purpose − 대체 메시지 본문을 설정하려면
Parameter − $ alt_body-대체 메시지 본문
Returns − 현재 인스턴스를 반환
예를 들면
$email = \Email::forge(); $email->alt_body('Body message');
//or pass it a View
$email->alt_body(\View::forge('my/view', $data);
우선 순위
Purpose − 메일의 우선 순위를 설정하려면
Parameter −
$priority− 우선 순위 값. 옵션은-
a. \Email::P_LOWEST
* \Email::P_LOW
* \Email::P_NORMAL
* \Email::P_HIGH
* \Email::P_HIGHEST
Returns − 현재 인스턴스를 반환
예를 들면
$email = \Email::forge();
$email->priority(\Email::P_HIGHEST);
html_body
Purpose − 메시지 본문을 HTML 형식으로 설정하려면
Parameter −
$html − HTML의 메시지 본문
generate_alt − 대체 메시지 생성 여부
auto_attach − 이미지 삽입 여부
Returns − 현재 인스턴스를 반환
예를 들면
$email = \Email::forge(); // Do generate the alt body, but don't auto attach images. $email->html_body(\View::forge('welcome/email', $data), true, false);
...에서
Purpose − 보낸 사람 주소를 설정하려면
Parameters −
$from − 이메일 주소에서
$name − 발신자 이름
Returns − 현재 인스턴스를 반환
예를 들면
$email = \Email::forge();
$email->from('[email protected]', 'My Name');
제목
Purpose − 메시지 제목을 설정하려면
Parameter − $ subject-이메일 메시지의 제목
Returns − 현재 인스턴스를 반환
예를 들면
$email = \Email::forge(); $email->subject('Suject of the mail message');
...에
Purpose − 수신자 이메일 주소를 설정하려면
Parameters −
$email − 이메일 주소 또는 이메일 주소 배열
$name − 수신자 이름
Returns − 현재 인스턴스를 반환
예를 들면
$email = \Email::forge(); $email->to('[email protected]', 'My Dear Name');
$email->to (array(
'[email protected]',
'[email protected]' => 'My Dear friend',
));
머리글
Purpose − 이메일 메시지에 사용자 정의 헤더를 설정하려면
Parameters −
$header − 헤더 유형 또는 헤더 배열
$value − 헤더 값
Returns − 현재 인스턴스를 반환
예를 들면
$email = \Email::forge();
$email->header('X-SMTPAP', 'XXXXXXXX'); $email>reply_to (array(
'X-SMTPAP' => 'XXXXXX',
'X-SMTPAP2' > 'XXXXXA',
));
붙이다
Purpose − 이메일 메시지에 파일을 첨부하려면
Parameters−
$file − 파일 경로
$inline − 파일을 인라인으로 첨부할지 여부
$cid − 콘텐츠 식별자
$mime − 첨부 파일의 MIME 유형
$name − 첨부 파일 이름 재정의
Returns − 현재 인스턴스를 반환
예를 들면
$email = \Email::forge();
$email>attach(DOCROOT.'attachments/sample_attachment.pdf');
보내다
Purpose − 메일을 보내려면.
Parameter −
$validate − 이메일 주소 유효성 검사 여부
Returns − 참 또는 거짓
예를 들면
$email = \Email::forge(); try{ $email->send();
} catch(\EmailSendingFailedException $e) { // The driver could not send the mail. } catch(\EmailValidationFailedException $e) {
// One or more email addresses failed validation.
}
근무 이메일 샘플
이전 장에서 배운 API를 사용하고 메시지를 보내는 간단한 코드를 만들어 보겠습니다. 다음은 메시지를 보내는 가장 간단한 코드입니다.
$email = Email::forge(); $email->from('[email protected]', 'person1');
$email->to('[email protected]', 'person2'); $email->subject('Add something');
$email->body('contents of mail'); $email->send();
Profiler응용 프로그램의 성능을 분석하고 개선하는 데 중요한 도구 중 하나입니다. FuelPHP는 애플리케이션을 프로파일 링하는 데 탁월한 프로파일 러를 제공합니다. 이 장에서 FuelPHP의 프로필에 대해 알아 보겠습니다.
프로파일 링 활성화
프로파일 링은 기본적으로 비활성화되어 있습니다. 프로파일 링을 활성화하려면 다음과 같이 기본 구성 파일 인 fuel / app / config / config.php에서 속성 프로파일 링을 true로 설정하십시오.
'profiling' => true,
이제 애플리케이션에서 프로파일 링이 활성화됩니다. 프로파일 링이 활성화되면 요청 된 모든 페이지는 다음 스크린 샷과 같이 프로파일 링 정보가 포함 된 추가 탭을 페이지 하단에 표시합니다.
프로파일 러 정보
프로파일 러에는 탭 인터페이스가 있으며 다음 데이터로 구성됩니다.
Console − 오류, 로그 항목, 메모리 사용량 또는 실행 타이밍에 대한 정보를 제공합니다.
Load time − 요청로드 시간을 표시합니다.
Database − 실행 된 쿼리 수 및 실행 시간.
Memory − 요청에 사용 된 총 메모리.
Files − 모든 PHP 파일을 표시합니다.
Config − 요청 종료시 구성 내용.
Session − 요청 종료시 세션 내용.
GET − $ _GET 배열의 내용.
POST − $ _POST 배열의 내용.
프로파일 러 클래스
프로파일 러 클래스는 프로파일 링 정보를 추가하는 데 사용됩니다. PHPQuickProfiler (PQP)의 사용자 정의 버전을 구현합니다. 프로파일 러에는 프로파일 러의 초기 상태를 제어하는 자바 스크립트 변수 모음이 포함되어 있습니다.
Profiler 클래스는 다음을 지원합니다 methods −
표()
mark 메소드는 프로파일 러에 속도 마커를 추가합니다. 로드 시간을 보여줍니다.
Profiler::mark('my custom code');
mark_memory ()
* mark_memory * 메소드는 프로파일 러에 메모리 마커를 추가합니다. 입력을 지정하지 않으면 해당 시점의 메모리 사용량이 기록됩니다. 아래와 같이 변수에 대한 변수와 레이블을 지정하면 변수의 메모리 사용량을 표시하고 지정된 레이블을 사용하여 레이블을 지정합니다.
mark_memory($this, 'My Employee Controller memory usage');
콘솔()
콘솔 메소드는 단순히 프로파일 러에 로그 항목을 추가합니다.
Profiler::console('log entry');
FuelPHP는 오류를 처리하고 애플리케이션을 디버깅하는 데 탁월한 지원을 제공합니다. 이 장에서 오류 처리 및 디버깅을 이해하겠습니다.
오류 처리
FuelPHP 오류 처리는 예외를 기반으로합니다. FuelPHP는 모든 오래된 PHP 오류에 대해 PhpErrorException 예외를 제공합니다. FuelPHP는 PHP 코드에서 오류가 발생할 때마다 PhpErrorException을 발생시킵니다. FuelPHP를 사용하면 다양한 HTTP 상태 코드에 대한 사용자 지정 오류 페이지를 쉽게 표시 할 수 있습니다.
파일을 찾을 수 없음 오류
FuelPHP는 알 수없는 요청을 처리하기 위해 새로운 예외 클래스 인 HttpNotFoundException을 제공합니다. 때로는 처리 할 수없는 요청이 발생할 수 있습니다. 그때 우리는 HttpNotFoundException을 던질 수 있습니다.
기본적으로 기본 페이지는 400 항목을 사용하여 경로 구성 파일 fuel / app / config / routes.php에서 HttpNotFoundException에 대해 구성됩니다. HttpNotFoundException이 발생할 때마다 요청은 400 페이지로 리디렉션됩니다.
'_404_' => 'welcome/404', // The main 404 route
내부 오류
FuelPHP는 모든 서버 오류를 처리하기 위해 새로운 예외 클래스 인 HttpServerErrorException을 제공합니다. 때로는 내부 오류로 인해 주어진 요청을 처리하지 못할 수도 있습니다. 그때 우리는 HttpServerErrorException을 던질 수 있습니다.
기본적으로 기본 페이지는 경로 구성 파일 fuel / app / config / routes.php에서 500 항목을 사용하여 HttpServerErrorException에 대해 구성됩니다. HttpServerErrorException이 발생할 때마다 요청은 500 페이지로 리디렉션됩니다.
'_500_' => 'welcome/500', // The main 500 route
이 페이지는 오류를 기록하고 페이지에 형식화 된 오류를 표시하며 때때로 시스템 관리자에게 알림을 보냅니다.
액세스 위반 오류
FuelPHP는 액세스 위반을 처리하기 위해 새로운 예외 클래스 인 HttpNoAccessException을 제공합니다. 경우에 따라 액세스 제한으로 인해 요청을 처리하지 못할 수 있습니다. 그때 우리는 HttpNoAccessException을 던질 수 있습니다.
기본적으로 기본 페이지는 403 항목을 사용하여 경로 구성 파일 fuel / app / config / routes.php에서 HttpNoAccessException에 대해 구성됩니다. HttpNoAccessException이 발생할 때마다 요청은 403 페이지로 리디렉션됩니다.
'_403_' => 'welcome/403', // The main 403 route
이 페이지에는 액세스 위반 정보가 표시됩니다.
디버깅
디버깅은 애플리케이션을 개발하는 가장 빈번한 활동 중 하나입니다. FuelPHP는 간단한 클래스를 제공합니다.Debug응용 프로그램의 디버깅 활동을 처리합니다. 이 장에서 Debug 클래스와 메서드에 대해 알아 보겠습니다.
디버그 클래스
Debug 클래스는 변수, 객체, 배열 등에 대한 자세한 정보를 보여주는 유틸리티 메소드를 제공합니다. Debug 클래스는 다음과 같은 메소드를 제공합니다.
덤프
dump 메소드는 형식화 된 구조화 된 방식으로 브라우저에 여러 혼합 값을 리턴합니다.
Debug::dump($var1, $var2);
역 추적 ()
역 추적은 현재 코드 실행에 대한 자세한 정보를 보여줍니다. PHP 파일 정보, 현재 행 및 모든 이전 작업을 보여줍니다.
Debug::backtrace();
클래스()
모든 클래스의 목록을 반환합니다.
Debug::classes();
인터페이스 ()
모든 인터페이스 클래스 목록을 반환합니다.
Debug::interfaces();
포함 ()
현재 런타임에로드 된 모든 포함 된 파일의 목록을 반환합니다.
Debug::includes();
함수 ()
모든 함수 목록을 반환합니다.
Debug::functions();
상수 ()
모든 상수 목록을 반환합니다.
Debug::constants();
확장 ()
모든 확장 목록을 반환합니다.
Debug::extensions();
헤더 ()
모든 HTTP 헤더 목록을 반환합니다.
Debug::headers();
phpini ()
php.ini 파일에서 읽은 구성 설정 목록을 인쇄합니다.
Debug::phpini();
단위 테스트는 대규모 프로젝트를 개발하는 데 필수적인 프로세스입니다. Unit tests모든 개발 단계에서 애플리케이션 구성 요소 테스트를 자동화하는 데 도움이됩니다. 애플리케이션의 구성 요소가 프로젝트의 비즈니스 사양에 따라 작동하지 않을 때 경고합니다. 단위 테스트는 수동으로 수행 할 수 있지만 종종 자동화됩니다.
PHPUnit
FuelPHP 프레임 워크는 PHPUnit 테스트 프레임 워크와 통합됩니다. FuelPHP 프레임 워크에 대한 단위 테스트를 작성하려면 PHPUnit을 설정해야합니다. PHPUnit이 설치되어 있지 않으면 다운로드하여 설치하십시오. 다음 명령을 사용하여 시스템에서 PHPUnit의 가용성을 확인할 수 있습니다.
phpunit --version
PHPUnit을 사용할 수있는 경우 다음과 유사한 결과가 표시됩니다.
PHPUnit 5.1.3 by Sebastian Bergmann and contributors.
단위 테스트 만들기
단위 테스트를 작성하기 위해 FuelPHP에서 제공하는 표준 위치는 fuel / app / tests입니다. 컨트롤러, 모델,보기 및 발표자에 대한 단위 테스트를 별도의 폴더에 작성할 수 있습니다. Model_Employee 개체의 유효성을 검사하는 단위 테스트를 작성하겠습니다.
Step 1 − fuel / app / tests 폴더 아래에 폴더, 모델을 생성합니다.
Step 2 − fuel / app / tests / model / 폴더에 employee.php 파일을 생성합니다.
Step 3 − PHPUnit에서 제공하는 TestCase 클래스를 확장하여 새로운 테스트 클래스 인 Test_Model_Employee를 생성합니다.
Step 4 − PHPUnit의 TestCase 클래스에서 제공하는 assertInstanceOf () 메서드를 사용하여 직원 객체 생성을 자산화하는 testInstanceOfEmployee () 메서드를 작성합니다.
다음은 완전한 코드입니다-
<?php
class Test_Model_Employee extends TestCase {
public function testInstanceOfEmployee() {
$this->assertInstanceOf(Model_Employee::class, new Model_Employee());
}
}
테스트 그룹 생성
FuelPHP는 테스트 케이스 그룹을 생성하는 옵션을 제공합니다. 그룹을 만드는 것은 docblock 속성 @group을 추가하는 것만 큼 간단합니다. MyTest 그룹에 테스트 케이스를 포함하겠습니다.
<?php
/**
* @group MyTest
*/
class Test_Model_Employee extends TestCase {
public function testInstanceOfEmployee() {
$this->assertInstanceOf(Model_Employee::class, new Model_Employee());
}
}
테스트 실행
디렉토리의 모든 테스트를 실행하려면 다음 명령을 사용하십시오.
$ php oil test
특정 테스트 그룹을 실행하려면 다음 명령을 사용하십시오.
$ php oil test --group = MyTest
명령을 실행하면 다음과 같은 응답을 받게됩니다.
Tests Running...This may take a few moments.
PHPUnit 5.1.3 by Sebastian Bergmann and contributors.
1 / 1 (100%).
Time: 123 ms, Memory: 8.00Mb
OK (1 test, 1 assertion)
이 장에서는 FuelPHP에서 완전한 MVC 기반 BookStore 애플리케이션을 만드는 방법을 배웁니다.
1 단계 : 프로젝트 만들기
다음 명령을 사용하여 FuelPHP에서 "BookStore"라는 새 프로젝트를 만듭니다.
oil create bookstore
2 단계 : 레이아웃 만들기
응용 프로그램에 대한 새 레이아웃을 만듭니다. fuel / app / views / layout.php 위치에 layout.php 파일을 생성하십시오. 코드는 다음과 같습니다.
fuel / app / views / layout.php
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "utf-8">
<meta http-equiv = "X-UA-Compatible" content = "IE = edge">
<meta name = "viewport" content = "width = device-width, initial-scale = 1">
<title><?php echo $title; ?></title>
<!-- Bootstrap core CSS -->
<link href = "/assets/css/bootstrap.min.css" rel = "stylesheet">
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js">
</script>
<script src = "/assets/js/bootstrap.min.js"></script>
</head>
<body>
<nav class = "navbar navbar-inverse navbar-fixed-top">
<div class = "container">
<div class = "navbar-header">
<button type = "button" class = "navbar-toggle collapsed"
datatoggle = "collapse" data-target = "#navbar"
aria-expanded = "false" ariacontrols = "navbar">
<span class= "sr-only">Toggle navigation</span>
<span class = "icon-bar"></span>
<span class = "icon-bar"></span>
<span class = "icon-bar"></span>
</button>
<a class = "navbar-brand" href = "#">FuelPHP Sample</a>
</div>
<div id = "navbar" class = "collapse navbar-collapse">
<ul class = "nav navbar-nav">
<li class = "active"><a href = "/book/index">Home</a></li>
<li><a href = "/book/add">Add book</a></li>
</ul>
</div><!--/.nav-collapse -->
</div>
</nav>
<div class = "container">
<div class = "starter-template" style = "padding: 50px 0 0 0;">
<?php echo $content; ?>
</div>
</div><!-- /.container -->
</body>
</html>
여기에서는 부트 스트랩 템플릿을 사용하고 있습니다. FuelPHP는 부트 스트랩 템플릿에 대한 최고 수준의 지원을 제공합니다. 제목과 내용이라는 두 가지 변수를 만들었습니다. title은 현재 페이지의 제목을 지정하는 데 사용되고 내용은 현재 페이지의 세부 정보를 지정하는 데 사용됩니다.
3 단계 : 컨트롤러 생성
책을 표시, 추가, 편집 및 삭제할 새 컨트롤러 인 Controller_Book을 만듭니다. 새 파일 fuel / app / classes / controller / book.php를 만들고 다음 코드를 배치합니다.
fuel / app / classes / controller / book.php
<?php
class Controller_Book extends Controller_Template {
public $template = 'layout';
public function action_index() {
// Create the view object
$view = View::forge('book/index'); // set the template variables $this->template->title = "Book index page";
$this->template->content = $view;
}
}
여기에서는 템플릿 컨트롤러를 상속하여 북 컨트롤러를 만들고 기본 템플릿을 fuel / app / views / layout.php로 설정했습니다.
4 단계 : 인덱스보기 만들기
폴더를 만들고 fuel / app / views 폴더 아래의보기 디렉토리에 예약하십시오. 그런 다음 책 폴더 안에 index.php 파일을 만들고 다음 코드를 추가하십시오.
fuel / app / views / index.php
<h3>index page</h3>
지금까지 기본적인 책 컨트롤러를 만들었습니다.
5 단계 : 기본 경로 수정
기본 경로를 업데이트하여 애플리케이션의 홈 페이지를 예약 컨트롤러로 설정합니다. 기본 라우팅 구성 파일 인 fuel / app / config / routes.php를 열고 다음과 같이 변경하십시오.
fuel / app / config / routes.php
<?php
return array (
'_root_' => 'book/index', // The default route
'_404_' => 'welcome/404', // The main 404 route
'hello(/:name)?' => array('welcome/hello', 'name' => 'hello'),
);
이제 URL을 요청하면 http : // localhost : 8080 /는 다음과 같이 책 컨트롤러의 색인 페이지를 반환합니다.
6 단계 : 데이터베이스 생성
다음 명령을 사용하여 MySQL 서버에 새 데이터베이스를 만듭니다.
create database tutorialspoint_bookdb
그런 다음 다음 명령을 사용하여 데이터베이스 내부에 테이블을 만듭니다.
CREATE TABLE book (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(80) NOT NULL,
author VARCHAR(80) NOT NULL,
price DECIMAL(10, 2) NOT NULL
);
다음 SQL 문을 사용하여 일부 샘플 레코드를 테이블에 삽입합니다.
INSERT
INTO
book(title,
author,
price)
VALUES(
'The C Programming Language',
'Dennie Ritchie',
25.00
),(
'The C++ Programming Language',
'Bjarne Stroustrup',
80.00
),(
'C Primer Plus (5th Edition)',
'Stephen Prata',
45.00
),('Modern PHP', 'Josh Lockhart', 10.00),(
'Learning PHP, MySQL & JavaScript, 4th Edition',
'Robin Nixon',
30.00
)
7 단계 : 데이터베이스 구성
fuel / app / config에있는 데이터베이스 구성 파일 db.php를 사용하여 데이터베이스를 구성하십시오.
fuel / app / config / db.php
<?php
return array (
'development' => array (
'type' => 'mysqli',
'connection' => array (
'hostname' => 'localhost',
'port' => '3306',
'database' => 'tutorialspoint_bookdb',
'username' => 'root',
'password' => 'password',
'persistent' => false,
'compress' => false,
),
'identifier' => '`',
'table_prefix' => '',
'charset' => 'utf8',
'enable_cache' => true,
'profiling' => false,
'readonly' => false,
),
'production' => array (
'type' => 'mysqli',
'connection' => array (
'hostname' => 'localhost',
'port' => '3306',
'database' => 'tutorialspoint_bookdb',
'username' => 'root',
'password' => 'password',
'persistent' => false,
'compress' => false,
),
'identifier' => '`',
'table_prefix' => '',
'charset' => 'utf8',
'enable_cache' => true,
'profiling' => false,
'readonly' => false,
),
);
8 단계 : Orm 패키지 포함
ORM 패키지를 포함하도록 기본 구성 파일을 업데이트하십시오. "fuel / app / config /"에 있습니다.
fuel / app / config / config.php
'always_load' => array (
'packages' => array (
'orm'
),
),
9 단계 : 모델 생성
“fuel / app / classes / model”에있는 book.php에서 책 모델을 만듭니다. 다음과 같이 정의됩니다-
fuel / app / classes / model / book.php
<?php
class Model_Book extends Orm\Model {
protected static $_connection = 'production'; protected static $_table_name = 'book';
protected static $_primary_key = array('id'); protected static $_properties = array (
'id',
'title' => array (
'data_type' => 'varchar',
'label' => 'Book title',
'validation' => array (
'required',
'min_length' => array(3),
'max_length' => array(80)
),
'form' => array (
'type' => 'text'
),
),
'author' => array (
'data_type' => 'varchar',
'label' => 'Book author',
'validation' => array (
'required',
),
'form' => array (
'type' => 'text'
),
),
'price' => array (
'data_type' => 'decimal',
'label' => 'Book price',
'validation' => array (
'required',
),
'form' => array (
'type' => 'text'
),
),
);
protected static $_observers = array('Orm\\Observer_Validation' => array (
'events' => array('before_save')
));
}
여기에서는 모델의 속성으로 데이터베이스 세부 정보를 지정했습니다. 유효성 검사 세부 정보도 있습니다.
10 단계 : 책 표시
책 컨트롤러에서 색인 조치를 업데이트하여 데이터베이스에서 사용 가능한 책을 나열하십시오.
fuel / app / classes / controller / book.php
<?php
class Controller_Book extends Controller_Template {
public $template = 'layout';
public function action_index() {
// Create the view object
$view = View::forge('book/index'); // fetch the book from database and set it to the view $books = Model_Book::find('all');
$view->set('books', $books);
// set the template variables
$this->template->title = "Book index page"; $this->template->content = $view;
}
}
여기에서 우리는 orm 데이터베이스에서 도서 세부 정보를 가져온 다음 도서 세부 정보를 뷰에 전달했습니다.
11 단계 : 인덱스보기 업데이트
“fuel / app / views / book”에있는 view 파일 index.php를 업데이트합니다. 전체 업데이트 코드는 다음과 같습니다.
fuel / app / views / book / index.php
<table class = "table">
<thead>
<tr>
<th>#</th>
<th>Title</th>
<th>Author</th>
<th>Price</th>
<th></th>
</tr>
</thead>
<tbody>
<?php
foreach($books as $book) { ?> <tr> <td><?php echo $book['id']; ?></td>
<td><?php echo $book['title']; ?></td> <td><?php echo $book['author']; ?></td>
<td><?php echo $book['price']; ?></td> <td> <a href = "/book/edit/<?php echo $book['id']; ?>">Edit</a>
<a href = "/book/delete/<?php echo $book['id']; ?>">Delete</a>
</td>
</tr>
<?php
}
?>
</tbody>
</table>
<ul>
</ul>
이제 URL을 요청하면 http : // localhost : 8080 /는 다음과 같이 페이지를 표시합니다.
12 단계 : 책을 추가하는 작업 만들기
서점에 새 책을 추가하는 기능을 만듭니다. 다음과 같이 북 컨트롤러에 새 액션 action_add를 생성합니다.
public function action_add() {
// create a new fieldset and add book model
$fieldset = Fieldset::forge('book')->add_model('Model_Book');
// get form from fieldset
$form = $fieldset->form();
// add submit button to the form
$form->add('Submit', '', array('type' => 'submit', 'value' => 'Submit')); // build the form and set the current page as action $formHtml = $fieldset->build(Uri::create('book/add')); $view = View::forge('book/add');
$view->set('form', $formHtml, false);
if (Input::param() != array()) {
try {
$book = Model_Book::forge(); $book->title = Input::param('title');
$book->author = Input::param('author'); $book->price = Input::param('price');
$book->save(); Response::redirect('book'); } catch (Orm\ValidationFailed $e) {
$view->set('errors', $e->getMessage(), false);
}
}
$this->template->title = "Book add page"; $this->template->content = $view; }
여기에서는 다음 두 가지 프로세스가 수행됩니다.
Fieldset 메서드와 Book 모델을 사용하여 책을 추가하는 책 양식을 작성합니다.
사용자가 도서 정보를 입력하고 양식을 다시 제출할 때 도서 양식을 처리합니다. 제출 된 데이터의 Input :: param () 메서드를 확인하여 찾을 수 있습니다. 양식 처리에는 다음 단계가 포함됩니다.
책 정보를 수집하십시오.
도서 정보를 확인합니다. 저장 방법 전에 호출 할 유효성 검사를 이미 설정했습니다. 유효성 검사가 실패하면 Orm \ ValidationFailed 예외가 발생합니다.
도서 정보를 데이터베이스에 저장합니다.
성공하면 사용자를 색인 페이지로 리디렉션합니다. 그렇지 않으면 양식을 다시 표시하십시오.
양식을 표시하고 동일한 작업으로 양식을 처리하면서 두 가지를 모두 수행합니다. 사용자가 처음으로 작업을 호출하면 양식이 표시됩니다. 사용자가 도서 정보를 입력하고 데이터를 제출하면 양식이 처리됩니다.
13 단계 : 책 추가 조치를위한보기 작성
책 추가 조치에 대한보기를 작성하십시오. 새 파일 fuel / app / views / book / add.php를 만들고 다음 코드를 입력합니다.
<style>
#form table {
width: 90%;
}
#form table tr {
width: 90%
}
#form table tr td {
width: 50%
}
#form input[type = text], select {
width: 100%;
padding: 12px 20px;
margin: 8px 0;
display: inline-block;
border: 1px solid #ccc;
border-radius: 4px;
box-sizing: border-box;
}
#form input[type = submit] {
width: 100%;
background-color: #3c3c3c;
color: white;
padding: 14px 20px;
margin: 8px 0;
border: none;
border-radius: 4px;
cursor: pointer;
}
#form div {
border-radius: 5px;
background-color: #f2f2f2;
padding: 20px;
}
</style>
<div id = "form">
<h2>Book form</h2>
<?php
if(isset($errors)) {
echo $errors; } echo $form;
?>
</div>
여기서는 action 메소드에서 생성 된 폼만 보여주고 있습니다. 또한 오류가있는 경우 표시합니다.
14 단계 : 책 추가 조치 확인
http : // localhost : 8080 / book / add URL을 요청하거나 책 탐색 추가 링크를 클릭하면 다음과 같은 양식이 표시됩니다.
형태
데이터가있는 양식
도서 정보를 입력하고 페이지를 제출하면 도서 정보가 데이터베이스에 저장되고 다음과 같이 페이지가 색인 페이지로 리디렉션됩니다.
새로 추가 된 도서가있는 도서 목록
15 단계 : 책을 편집하기위한 조치 작성
기존 도서 정보를 편집하고 업데이트하는 기능을 만듭니다. 다음과 같이 북 컨트롤러에서 새 액션 action_edit를 만듭니다.
public function action_edit($id = false) { if(!($book = Model_Book::find($id))) { throw new HttpNotFoundException(); } // create a new fieldset and add book model $fieldset = Fieldset::forge('book')->add_model('Model_Book');
$fieldset->populate($book);
// get form from fieldset
$form = $fieldset->form();
// add submit button to the form
$form->add('Submit', '', array('type' => 'submit', 'value' => 'Submit')); // build the form and set the current page as action $formHtml = $fieldset->build(Uri::create('book/edit/' . $id));
$view = View::forge('book/add'); $view->set('form', $formHtml, false); if (Input::param() != array()) { try { $book->title = Input::param('title');
$book->author = Input::param('author'); $book->price = Input::param('price');
$book->save(); Response::redirect('book'); } catch (Orm\ValidationFailed $e) {
$view->set('errors', $e->getMessage(), false);
}
}
$this->template->title = "Book edit page"; $this->template->content = $view;
}
페이지를 처리하기 전에 요청 된 책을 ID로 검색한다는 점을 제외하면 추가 조치와 유사합니다. 데이터베이스에서 도서 정보가 발견되면 계속 진행하고 양식에 도서 정보를 표시합니다. 그렇지 않으면 파일을 찾을 수 없음 예외가 발생하고 종료됩니다.
16 단계 : 편집 조치를위한보기 작성
책 편집 조치에 대한보기를 작성하십시오. 여기에서는 추가 작업에 사용 된 것과 동일한 뷰를 사용합니다.
17 단계 : 책 편집 작업 확인.
도서 목록 페이지에서 책의 편집 링크를 클릭하면 다음과 같은 해당 도서 양식이 표시됩니다.
도서 세부 정보가있는 양식
18 단계 : 책 삭제 조치 작성
서점에서 책을 삭제하는 기능을 만듭니다. 다음과 같이 북 컨트롤러에서 새로운 액션 action_delete를 생성합니다.
public function action_delete($id = null) {
if ( ! ($book = Model_Book::find($id))) {
throw new HttpNotFoundException();
} else {
$book->delete();
}
Response::redirect('book');
}
여기에서는 제공된 도서 ID를 사용하여 데이터베이스에 도서가 있는지 확인합니다. 책이 발견되면 삭제되고 색인 페이지로 리디렉션됩니다. 그렇지 않으면 페이지를 찾을 수없는 정보가 표시됩니다.
19 단계 : 삭제 작업 확인
도서 목록 페이지에서 삭제 링크를 클릭하여 삭제 작업을 확인하십시오. 요청 된 책을 삭제 한 다음 다시 색인 페이지로 리디렉션됩니다.
마지막으로 책 정보를 추가, 편집, 삭제 및 나열하는 모든 기능이 생성됩니다.
FuelPHP는 다른 MVC 기반 PHP 프레임 워크에 비해 간단하고 유연하며 확장 가능하며 쉽게 구성 할 수 있습니다. 최신 MVC 프레임 워크의 모든 기능을 제공합니다. 그대로 사용하거나 필요에 맞게 완전히 변경할 수 있습니다. 무엇보다도 웹 개발을위한 훌륭한 선택입니다.