
CIROは、プロジェクトを迅速にキックスタートするためのMVC PHPフレームワークであり、シンプルで構成可能で、モジュール式、デカップル、拡張可能、軽量であるように設計されており、より良く維持されたPHPコードを簡単に構築できるようにします。
箱から出してciroに付属しています:
Ciroには、プロジェクトまたはプロトタイプの開発を開始するためのシンプルな認証システムを備えたテンプレートプロジェクトが付属しています。
フレームワークテンプレートプロジェクトのオンライン例:https://ciro-framework.herokuapp.com
C:xampphtdocs for /Applications/XAMPP/xamppfiles/htdocs for Macにコピーします。httpd.confディレクトリルートをCiroのディレクトリに構成します。手順を参照してください:こちら。事前に作成されたログイン/レジスタを使用し、 SQL(Mongoではない)を使用するには、SQLでデータベースとテーブルを作成する必要があります。
http://localhost/phpmyadminに移動し、ルートディレクトリに存在するsql_database_script.sqlのクエリを実行します。事前に作成されたログイン/レジスタを使用し、 MongoDBを使用するには、Composerを使用してmongodb extensionとMongoDB PHP Libraryをインストールする必要があります。また、 Models/UserRepository.phpをModels.disabled.mongo.userrepository.class.phpに置き換えて、mongodbバージョンを使用します。
Mysqliバージョン。PDOバージョンはRDBMSをサポートしました。MongoDBバージョン(PHP 7.0+)。すべては構成ファイルを介して構成可能です。

プロジェクト構造は、NameSpaced 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 ooop表記は以下に対応します。
App Controllers { route }{controller} -> { action } configuration Config/config.phpでは、「default_route」を指定できるため、URLにルートが含まれていない場合、プログラムはデフォルトルートに応じてルーティングします。デフォルトでは、「default_route」は「web」です。したがって、デフォルトルートを使用する典型的なURLには、次の構造があります。
http://example.io/{controller}/{action}/{param1?}/{param2?}/...
したがって、php oopで表記は次のものに対応しています。
App Controllers Web {controller} -> { action }別の例:
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
パラメーション{param1} 、 $this -> params[0..*] $this->params[0]を介してコントローラーの方法内にアクセスできます。
コントローラーの方法内にパラメーションにアクセスする別の方法は、コントローラーの方法自体に引数を追加することです。上記の同じ例を使用して、 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コントローラー: Homeアクション: 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?}はオプションのパラメージであり、オプションのパラメーションには'?'が必要です。名前の最後に、コントローラーのメソッドにデフォルト値を持つ必要があります。そうでない場合は、PARAMが欠落している場合、プログラムは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
ルーティングにWebされたため、ルーティングで使用されていたため{var_controller} {var_controller}も{action}も{action}も含まれない。
したがって、url = custom / Account / pattern / View / sherifabdlnabyを使用してリクエストが来た場合、ルート: Web 、コントローラー: Account 、アクション: 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 Webページをレンダリングします。レイアウトには、ヘッダー、メタデータセクション、アラート、ボディ、フッターが含まれます。レイアウトのボディセクションは、コントローラーのMethod ViewPathに従って決定されます。
コントローラーのビューは$ data []配列を使用して要素をレンダリングし、メタデータセクションは$ meta []アレイを使用します。
render ( $ layout = null , $ viewPath = null , & $ data = null , & $ meta = null );| arg | 説明 | デフォルト値 |
|---|---|---|
$layout | レンダリングに使用されるビューレイアウトを指定します | config.phpで指定されたデフォルトのレイアウト |
$viewPath | ビューをレンダリングするパスを指定します | コントローラーのメソッド名に従って決定された表示 |
$data | $data array()ビューにもアクセスできます | コントローラー独自の$dataアレイ() |
$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は、カスタムメッセージ/エラーページをレンダリングします。ステータスコードが2番目のパラメーターで指定されている場合、コントローラーは対応する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内部サーバーエラーカスタムエラーページになります。
コントローラーのreturn()をコントローラーのNO出力から返すと、ユーザーに送信されますが、ユーザーは指定された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ステートメントでは使用されませんが、ユーザーをリダイレクトしている場合はスクリプトを停止します。つまり、この関数以下のコードは、検証が偽である場合は実行されません。
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 Webページの構造であり、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は、ブートストラップCSSやJSなどのレイアウトに含める必要があります。
<!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 > 
ビューは、Webコントローラーのアクションの出力であり、ビューにはコントローラーによって渡される$ 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で有効/無効にできます。データベースヘルパークラスは、接続資格情報が構成ファイルに保存されているデータベース接続のSingletonインスタンスを取得するために使用されます。
| クラス | 拡大 | 説明 |
|---|---|---|
| dbpdo | PDO | PDO DB拡張のシングルトンクラス、PDOを使用して、mysql、mariadb、postgresqlなどのさまざまなRDBM、 Configpdo.phpで設定され、 Config/config.phpで有効になります |
| DBSQL | Mysqli | mysqli拡張機能のシングルトンクラス、 Configmysqli.phpで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ライセンスの下にあります。ここでライセンスを表示できます。