
CIRO는 프로젝트를 빠르게 시작하는 MVC PHP 프레임 워크로 간단하고 구성 가능하며 모듈 식, 분리, 확장 가능 및 경량으로 설계되어 더 나은 PHP 코드를 쉽게 구축 할 수 있도록 설계되었습니다.
상자에서 Ciro는 다음과 같이 제공됩니다.
Ciro는 프로젝트 또는 프로토 타입을 위해 Kickstart를 개발할 수있는 간단한 인증 시스템이 포함 된 템플릿 프로젝트와 함께 제공됩니다.
프레임 워크 템플릿 프로젝트의 온라인 예 : https://ciro-framework.herokuapp.com
C:xampphtdocs 용 Windows 또는 /Applications/XAMPP/xamppfiles/htdocs 로 복사하십시오.httpd.conf 디렉토리 루트를 Ciro의 디렉토리에 구성하십시오. 지침을 참조하십시오.사전 제작 된 로그인/레지스터를 사용하고 SQL (몽고가 아님)을 사용 하려면 SQL에서 데이터베이스와 테이블을 만들어야합니다.
http://localhost/phpmyadmin 으로 이동하여 루트 디렉토리에 존재하는 sql_database_script.sql 에서 쿼리를 실행하십시오. 사전 제작 된 로그인/레지스터를 사용하고 MongoDB를 사용 하려면 Composer를 사용하여 mongodb extension 및 MongoDB PHP Library 설치해야합니다. 또한 MONGODB 버전을 사용하려면 Models/UserRepository.php Models.disabled.mongo.userrepository.class.php 로 바꾸십시오.
Mysqli 버전.PDO 버전 지원 RDBMS.MongoDB 버전 (PHP 7.0+).구성 파일을 통해 구성 가능합니다.

프로젝트 구조는 네임 스패닝 된 PSR-4 사양을 따릅니다.
+---Config <- Contains Configurations Files.
+---Controllers <- Contains a Dir for each Route each contains this Route's Controllers.
+---Core <- Contains Core Classes for the framework
+---Logs <- Contains Logs created by the scripts (e.g Exception Handler logs)
+---Models <- Contains Models (can be sub-directoried using namespaces using PSR-4 specs.
+---Utilities <- Contains Utility Classes.
+---Vendor <- Composer's Vendor Dir, contains autoloader code and third-party packeges.
+---Views <- Contains Views, a Dir for each route, each contains a Dir for each Controller.
| +---_FullMessages <- Contains Full Messages HTML designs.
| +---_Layouts <- Contains Layouts
+---Webroot <- Public Dir contains the single point of entry of the program, and all public assets.
Ciro에서는 기본 URL 경로에는 다음과 같은 구조가 있습니다.
http://example.io/{route}/{controller}/{action}/{param1?}/{param2?}/...
이 URL은 네임 스페이스 controllers/{route} 에서 컨트롤러 {controller} 의 메소드 {action} 로 전환되므로 Php OOP 표기법에서는 다음과 같습니다.
App Controllers { route }{controller} -> { action } configuration Config/config.php 에서는 URL에 경로가 포함되지 않으면 기본 경로에 따라 프로그램이 라우팅됩니다. 기본적으로 'default_route'는 '웹'입니다. 따라서 기본 경로를 사용하는 일반적인 URL에는 다음과 같은 구조가 있습니다.
http://example.io/{controller}/{action}/{param1?}/{param2?}/...
따라서 PHP OOP 표기법에서는 다음과 일치합니다.
App Controllers Web {controller} -> { action }Another example:
for $id
http://example.io/{controller}/{action}/{param1}
http://example.io/ Product / View / 6800
URL이 {action} 지정하지 않으면 'config/config.php'에 지정된 'default_action'으로의 경로로가는 프로그램입니다.
URL이 {controller} 지정하지 않으면 'config/config.php'에 지정된 'default_controller'로 경로로 향하는 프로그램입니다.
기본 라우팅을 사용하여 새 경로를 추가하고 액세스하려면 Config/config.php 라우팅 테이블에 추가해야합니다.
예를 들어이 URL이 주어지면 :
for $id $color
http://example.io/{controller}/{action}/{param1}/{param2}
http://example.io/ Product / View / 6800 / red
매개 변수는 $this -> params[0..*] $this->params[0] {param1} 통해 컨트롤러 메소드 내부에서 액세스 할 수 있습니다.
컨트롤러 메소드 내부에서 매개 변수에 액세스하는 또 다른 방법은 컨트롤러 메소드 자체에 인수를 추가하는 것입니다. 위의 동일한 예제를 사용하여 ProductController -> View 다음과 같이 정의됩니다.
class ProductController extends WebController {
public function view ( $ id , $ color = ' white ' ){
/* controller's method code here */
}
} $id {param1} 의 값을 가지며, $color {param2} 의 값을 가짐으로써 ...
{param2} URL에 있지 않은 경우 $color 지정된 기본값을 사용하지만 {param1} URL에 있지 않은 경우 프로그램은 404: Not Found $id 컨트롤러의 메소드에 지정된 기본값이 없기 때문에 메시지를 찾을 수 없습니다.
사용자 정의 경로를 사용하면 URL이 일치하면 특정 지정된 매개 변수와 함께 지정된 {route}{controller}::{action} 로 라우팅되는 특정 패턴의 URL을 지정할 수 있습니다.
Config/config.php 에서 사용자 정의 경로를 활성화/비활성화 할 수 있습니다.
모든 REST HTTP 동사에 대한 사용자 정의 경로를 지정하거나 예를 들어 ( GET, POST, PUT, DELETE, etc ) 가능한 모든 HTTP 동사에 대한 사용자 정의 경로를 지정할 수 있습니다.
// for GET requests
Route:: get ( $ uri , $ route , $ controller , $ action );
// same for POST, PUT, DELETE, etc requests
Route:: post (), Route:: put (), Route:: delete (), Route:: patch (), Route:: options ();
// for ALL requests
Route:: all ();사용자 정의 경로는 /config/routes.php 에 정의되어 있습니다.
Route:: get ( ' custom/route/{id}/{name}/{language?} ' , ' Web ' , ' Home ' , ' CustomRouteAction ' ); custom/route/{id}/{name}/{language?} 와 일치하는 모든 URL. Route : Web Controller : Home Action : CustomRouteAction .
{ name } 으로 둘러싸여 있어야하며 선택적 매개 변수에는 '?' 가 있어야합니다. 그들의 이름의 끝에서 { optinoalParam? } .$this -> params[0..*] 배열을 통해 컨트롤러 메소드 내부에서 액세스 할 수 있으며 각각 URL의 순서로 주문됩니다.$this -> param[0] {id} 에 해당하며 $this -> param[1] {name} 등에 해당합니다.사용자 정의 경로에 대한 컨트롤러의 방법은 다음과 같이 정의되어야합니다.
class HomeController extends WebController {
public function CustomRouteAction ( $ id , $ name , $ language = ' default ' ){
/* controller's method code here */
}
} 위의 예에서 참고 : {language?} 는 선택적 매개 변수입니다. 옵션 매개 변수에는 '?' 가 있어야합니다. 이름이 끝나면 컨트롤러 메소드에 기본값이 있어야합니다. 그렇지 않으면 매개 변수가 누락 된 경우 프로그램은 선택적 매개 변수가 제공되지 않았고 기본값이 없기 때문에 404: Not Found .
사용자 정의 경로를 설정할 때 대상 route , controller 또는 action 에 변수 매개 변수를 넣어보다 '일반적인'사용자 정의 경로를 만들 수 있습니다.
예:
Route:: get ( ' custom/{var_controller}/pattern/{action}/{param1} ' , ' Web ' , ' {var_controller} ' , ' {action} ' ); custom/{var_controller}/pattern/{action}/{param1} 과 일치하는 모든 URL
Route : Web , Controller : {var_controller} , action : {action} 및 paramse는 라우팅에 사용되었으므로 {var_controller} 또는 {action} 포함하지 않습니다.
따라서 URL = Custom / Account / Pattern / View / sherifabdlnaby 있는 요청이 나오면 다음과 같이 라우팅됩니다 : Route : Web , Controller : Account , Action : View 및 Params [0] = ' sherifabdlnaby '
컨트롤러는 사용자 요청을 처리하고 WebControllers 용 HTML 또는 ApiControllers 의 JSONRESULT 또는 다른 대상으로 리디렉션하는 사용자의 출력을 반환 할 책임이 있습니다.
컨트롤러 디렉토리는 컨트롤러의 네임 스페이스와 일치해야하며 다음 Controllers{route}{ControllerName}Controller.php 와 함께해야합니다. 네임 스페이스 AppControllers{route} 여기서 {route} 는이 컨트롤러가 속하는 경로입니다.
+---Controllers
| +---Api <-- Api route dir.
| | HomeController.php <-- Home Controller for API route.
| |
| ---Web <-- Web (Default) route dir.
| AccountController.php
| HomeController.php <-- Home Controller for Web default route.
컨트롤러에는 4 개의 보호 된 변수가 있습니다.
$ params ; // array() that holds method's params
$ model ; // controller's model
$ data ; // the $data array() is what is passed to the controller's view.
$ meta ; // the $meta array() is what is passed to $layout meta section (for WebControllers Only)컨트롤러의 출력 (및 사용자가 보는 것)은 그것을 통해 반환됩니다 .
Ciro의 컨트롤러에는 이러한 작업을 완화하기 위해 컨트롤러 내부의 출력을 반환 할 때 사용할 다양한 기능이 있습니다.
렌더는 레이아웃을 사용하여 HTML 웹 페이지를 렌더링하고 레이아웃에는 헤더, 메타 데이터 섹션, 알림, 본문 및 바닥 글이 포함되어 있습니다. 레이아웃의 본문 섹션은 컨트롤러의 메소드 뷰 패스에 따라 결정됩니다.
컨트롤러의보기는 $ data [] 배열을 사용하여 요소를 렌더링하고 메타 데이터 섹션은 $ meta [] 배열을 사용합니다.
render ( $ layout = null , $ viewPath = null , & $ data = null , & $ meta = null );| arg | 설명 | 기본값 |
|---|---|---|
$layout | 렌더링에 사용되는 뷰 레이아웃을 지정합니다 | config.php 에 지정된 기본 레이아웃 |
$viewPath | 보기 렌더링 경로를 지정합니다 | 컨트롤러 메소드 이름에 따라 결정된보기 |
$data | $data array ()보기에도 액세스 할 수 있습니다 | 컨트롤러 자체 $data array () |
$meta | $meta array () 레이아웃도 액세스 할 수 있습니다 | 컨트롤러 자체 $meta 배열 () |
return $this->render(); 주어진 인수가 없으면 (기본값 사용) 사례의 90%에서 충분합니다.
$ this-> render ()의 기본 사용;
class AccountController extends WebController {
public function View ( $ username ){
$ this -> data [ ' name ' ] = $ username ;
return $ this -> render ();
}
}RenderFullError 및 RenderFullMessage는 사용자 정의 메시지/오류 페이지를 렌더링합니다. 상태 코드가 2nd 매개 변수에 제공되면 컨트롤러는 해당 HTTP 상태 코드 헤더를 보내고이 코드의보기를 렌더링합니다.
function renderFullError( $ message , $ statusCode = null , $ layout = null );
function renderFullMessage( $ message , $ statusCode = null , $ layout = null );| arg | 설명 | 기본값 |
|---|---|---|
$message | 보기에서 렌더링 할 메시지. | 없음 (필수 필드) |
$statusCode | HTTP 상태 코드 | 널 |
$layout | 렌더링에 사용되는 뷰 레이아웃을 지정합니다 | config.php 에 지정된 기본 레이아웃 |
$ this-> RenderFullError () / RenderFullMessage ()의 기본 사용;
class AccountController extends WebController {
public function View ( $ username ){
if ( /* User Found */ )
return $ this -> render ();
else
return $ this -> renderFullError ( ' User not found! ' , 404 );
}
}스크립트 실행 중에 예외가 제기되면 프레임 워크는 500 내부 서버 오류 사용자 정의 오류 페이지를 렌더링합니다.
$ thisht this-> return ()에서 컨트롤러의 return ()가 사용자에게 전송되지만 사용자는 주어진 URL로 리디렉션됩니다.
function redirect( $ path );| arg | 설명 | 기본값 |
|---|---|---|
| $ 경로 | Relative 또는 Full 경로로 리디렉션됩니다 | 없음 (필수 필드) |
$ this-> redirect ()의 기본 사용;
class AccountController extends WebController {
public function Login ( $ username , $ password ){
if ( /* Login Success */ )
return $ this -> redirect ( ' / ' ); // redirect to homepage.
else
return $ this -> renderFullMessage ( ' Incorrect Username or Password ' , 401 );
}
}사용자가 로그인되어 있는지 확인하고, 그렇지 않은 경우 홈페이지/로그인으로 리디렉션하십시오.
이러한 기능은 Return 문에 의해 사용되지 않지만 사용자를 리디렉션하는 경우 스크립트를 중지합니다. 즉, 유효성 검사가 False 인 경우이 기능 아래의 모든 코드가 실행되지 않습니다.
function verifyLoggedIn();
function verifyNotLoggedIn();$ this-> verifyLoggedIn () / verifynotloggedin ()의 기본 사용법;
class AccountController extends WebController {
public function Login ( $ username , $ password ){
$ this -> verifyNotLoggedIn (); //Redirects to Homepage if user is already logged in.
if ( /* Login Success */ )
return $ this -> redirect ( ' / ' );
else
return $ this -> renderFullMessage ( ' Incorrect Username or Password ' , 401 );
}
} 세션 클래스는 단일 책임 원칙을 시행하기 위해 프로그램에서 $ _ SESSION 의 사용을 관리하는 확장 가능한 클래스입니다.
/* Save Parameters to $_SESSION, use for Login */
public static function saveLoginSession( $ _id , $ username );
/* Return TRUE if user is logged On */
public static function isLoggedIn ();
/* Unset and Destroy current Session, use for logout */
public static function destroyLoginSession ();
/* Add Error Alerts to be rendered to user when controller's $this -> render() is called */
public static function addErrorAlert ( $ errorAlert );
/* Add Warning Alerts to be rendered to user when controller's $this -> render() is called */
public static function addWarningAlert ( $ warningAlert );
/* Add info Alerts to be rendered to user when controller's $this -> render() is called */
public static function addInfoAlert ( $ infoAlert );
/* Add success Alerts to be rendered to user when controller's $this -> render() is called */
public static function addSuccessAlert ( $ successAlert );알림은 사용자 세션에 저장된 플래시 메시지이며, HTML로 렌더링하거나 API의 JSON에서 인코딩하여 알림을 사용자에게 보여줄 수 있습니다.
경고를 사용하여 양식 검증에 대한 오류 또는 프로세스가 성공하거나 실패한 경우 메시지를 표시 할 수 있습니다.
알림에는 모든 레이아웃에 자체 섹션이 있으며 컨트롤러 -> render () 함수는 사용자 세션에 저장된 알림을 렌더링합니다.
경고에는 4 가지 유형이 있습니다.

레이아웃은 HTML 웹 페이지의 구조이며 5 개의 섹션으로 구성됩니다.
| 부분 | 설명 |
|---|---|
| 메타 | 이 섹션에서는 제목, DESC 및 SEO 태그에 대한 HTML 메타 데이터 태그를 렌더링합니다. 메타 데이터는 컨트롤러에 의해 전달되고 채워졌으며 $ meta array ()에서 액세스 할 수 있습니다. |
| 헤더 | 이 섹션에서는 페이지 헤더를 렌더링합니다 |
| 알림 | 이 섹션에서는 사용자 세션에 저장된 경고를 렌더링합니다. |
| 콘텐츠 | 이 섹션에서는 페이지의 주요 부분을 렌더링하고 컨트롤러가 데이터를 전달하고 채우도록합니다. |
| 보행인 | 이 섹션에서는 페이지 바닥 글을 렌더링합니다 |
+---Views
| ---_Layouts
| ---default <-- Layout root directory.
| | | footer.html
| | | header.html
| | | layout.html
| | | meta.html
| | ---alerts <-- alerts directory.
| | errors.html
| | infos.html
| | successes.html
| | warnings.html
| ---anotherLayout
Layout.html은 레이아웃을 렌더링 할 때 렌더링 된 최종 파일입니다.이 레이아웃에 사용되는 모든 CSS/JS는 Bootstrap CSS 및 JS와 같은 Layout.html에 포함되어야합니다.
<!DOCTYPE html >
< html lang =" en " >
< head >
< ?= $data['meta'] ? >
< link rel =" stylesheet " href =" /bootstrap/css/bootstrap.min.css " >
</ head >
< body >
< ?= $data['header'] ? >
< ?= $data['alerts'] ? >
< ?= $data['content'] ? >
< ?= $data['footer'] ? >
< script src =" /bootstrap/js/bootstrap.min.js " > </ script >
</ body >
</ html > 
보기는 웹 컨트롤러 동작의 출력이며, View에는 컨트롤러가 전달되는 $ Data Assoc 배열이 있으며 컨트롤러와보기간에 데이터를 전달하는 데 사용됩니다. 보기 위치는 컨트롤러 경로/네임 스페이스 구조와 일치해야합니다.
Web 경로에서 Account Controller 의 조치 View 예 +---Controllers
| +---Api
| | HomeController.php
| |
| ---Web
| AccountController.php <-- Account Controller of Web route in ControllersWeb
| HomeController.php
|
+---Views
| +---Web
| | +---Account <-- Account Controller View Dir in ControllerWebAccount
| | | Index.html
| | | Login.html
| | | Register.html
| | | View.html <-- The View for action 'View', of 'Account Controller' in the 'Web' Route
| | |
| | ---Home
| | About.html
| | Index.html
Config/config.php 에서 예외 및 오류 핸들러를 활성화/비활성화 할 수 있습니다.데이터베이스 헬퍼 클래스는 연결 자격 증명이 구성 파일에 저장되는 데이터베이스 연결 용 싱글 톤 인스턴스를 얻는 데 사용됩니다.
| 수업 | 확대 | 설명 |
|---|---|---|
| DBPDO | PDO | PDO DB 확장을위한 싱글 톤 클래스, PDO는 MySQL, MariadB 또는 PostgreSQL과 같은 다양한 RDBM에 연결하는 데 사용될 수 있으며 Configpdo.php 에서 설정하고 Config/config.php 에서 활성화 |
| DBSQL | Mysqli | Configmysqli.php 에서 mysqli 확장, mysql에 대한 연결 자격 증명을위한 싱글 톤 클래스, Config/config.php 에서 활성화 |
| dbmongo | MongoDB PHP Library 사용 mongodb (PHP 7.0+) | 저수준 mongodb 확장 주위에 구축 된 MongoDB PHP 라이브러리 연결을위한 싱글 톤 클래스, 자격 증명은 Configmongo.php 에 저장되고 Config/config.php 에서 활성화됩니다. |
mongodb 확장 및 MongoDB PHP Library 가 필요하며 PHP 7.0+가 필요합니다. composer require mongodb/mongodbCiro PHP 프레임 워크는 MIT 라이센스에 따라 여기에서 라이센스를 볼 수 있습니다.