
CIRO ist ein MVC -PHP -Framework, um Projekte schnell zu kicken. Es ist so konzipiert, dass es einfach, konfigurierbar, modular, entkoppelt, erweiterbar und leicht ist, damit ein besserer und einfacher Wartung von PHP -Code besser erstellt wird.
Aus der Schachtel kommt Ciro mit:
CIRO verfügt über ein Vorlagenprojekt mit einem einfachen Authentifizierungssystem, um sich für Ihr Projekt oder Prototyp zu entwickeln.
Online-Beispiel für das Framework-Vorlageprojekt: https://ciro-framework.herokuapp.com
C:xampphtdocs für Windows oder /Applications/XAMPP/xamppfiles/htdocs für mac.httpd.conf -Verzeichnis von XAMPP von Apache im Verzeichnis von CIRO, siehe Anweisungen: HIER.Um das vorgefertigte Login/Register zu verwenden, verwenden Sie SQL (nicht Mongo), Sie müssen die Datenbank und Tabellen in SQL erstellen.
http://localhost/phpmyadmin und führen Sie die Abfrage in sql_database_script.sql aus, die im Stammverzeichnis vorliegt. Um das vorgefertigte Anmelde-/Register zu verwenden, und Sie mit MongoDB verwenden möchten, müssen Sie mongodb extension und MongoDB PHP Library mit Composer (Anweisungen hier mithilfe von Anweisungen) installieren. Ersetzen Sie auch Models/UserRepository.php durch Models.disabled.mongo.userrepository.class.php um die MongoDB -Version zu verwenden.
Mysqli -Version für MySQL.PDO -Version für PDO unterstützte RDBMS (en).MongoDB -Version (PHP 7.0+).Alle konfigurierbar über die Konfigurationsdateien.

Die Projektstruktur folgt den namensspaierten PSR-4-Spezifikationen.
+---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.
In Ciro hat eine Standard -URL -Route die folgende Struktur:
http://example.io/{route}/{controller}/{action}/{param1?}/{param2?}/...
Diese URL wird in den Namespace controllers/{route} in der Methode {action} von Controller {controller} gelöst.
App Controllers { route }{controller} -> { action } In Configuration Config/config.php können Sie eine 'default_route' angeben. Wenn eine URL also keine Route enthält, wird das Programm gemäß der Standardroute weitergeleitet. Standardmäßig ist 'default_route' 'Web'. Eine typische URL, die die Standardroute verwendet, hat also die folgende Struktur:
http://example.io/{controller}/{action}/{param1?}/{param2?}/...
In der Php -OOP -Notation entspricht also:
App Controllers Web {controller} -> { action }Ein weiteres Beispiel:
for $id
http://example.io/{controller}/{action}/{param1}
http://example.io/ Product / View / 6800
Wenn die URL {action} nicht angibt, wird das in 'config/config.php' angegebene Programm zur Route zu 'default_action' nicht angegeben.
Wenn die URL {controller} nicht angibt, wird das in 'config/config.php' angegebene Programm zum 'default_controller' nicht angegeben.
Um eine neue Route hinzuzufügen und mithilfe der Standardrouting darauf zugreifen zu können, müssen Sie sie in der Routing -Tabelle Config/config.php hinzufügen.
Angesichts dieser URL zum Beispiel:
for $id $color
http://example.io/{controller}/{action}/{param1}/{param2}
http://example.io/ Product / View / 6800 / red
Die Parameter sind in der Methode des Controllers über $this -> params[0..*] -Array zugänglich, z. B. $this->params[0] enthält den Wert von {param1} in der URL oben.
Eine andere Möglichkeit, in der Methode des Controllers auf Parameter zuzugreifen, besteht darin, die Methode des Controllers selbst Argumente hinzuzufügen. Verwenden Sie das gleiche Beispiel oben, wenn ProductController -> View wie folgt definiert ist:
class ProductController extends WebController {
public function view ( $ id , $ color = ' white ' ){
/* controller's method code here */
}
} $id hat den Wert von {param1} , $color hat den Wert von {param2} und so weiter ...
Beachten Sie , dass $color den angegebenen Standardwert verwendet, wenn {param2} nicht in der URL nicht in der URL verwendet wird. Wenn {param1} nicht in der URL war, wird das Programm eine 404: Not Found Nachricht erbringen, da $id keinen Standardwert hat, der in der Methode des Controllers angegeben ist.
Benutzerdefinierte Routen geben Ihnen die Möglichkeit, eine URL mit einem bestimmten Muster anzugeben , bei dem die URL, wenn sie übereinstimmt, an die angegebene {route}{controller}::{action} mit den richtigen angegebenen Parameten weitergeleitet wird.
Benutzerdefinierte Routen können in Config/config.php aktiviert/deaktiviert werden.
Sie können eine benutzerdefinierte Route für jeden REST -HTTP -Verb z. ( GET, POST, PUT, DELETE, etc ) oder eine benutzerdefinierte Route für alle möglichen HTTP -Verben angeben, indem Sie Folgendes verwenden:
// 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 ();Benutzerdefinierte Routen werden in /config/routes.php definiert.
Route:: get ( ' custom/route/{id}/{name}/{language?} ' , ' Web ' , ' Home ' , ' CustomRouteAction ' ); Irgendwelche URL, die custom/route/{id}/{name}/{language?} Übereinstimmen, wird auf: Route: Web -Controller: Home -Aktion: CustomRouteAction weitergeleitet.
{ name } , optionale Parameter sollten ein '?' Am Ende ihrer Namen { optinoalParam? } .$this -> params[0..*] -Array zugänglich und sind jeweils in der Reihenfolge in der URL geordnet.$this -> param[0] entspricht {id} , $this -> param[1] entspricht {name} usw.Die Methode eines Controllers einer benutzerdefinierten Route sollte wie folgt definiert werden:
class HomeController extends WebController {
public function CustomRouteAction ( $ id , $ name , $ language = ' default ' ){
/* controller's method code here */
}
} Beachten Sie im obigen Beispiel: {language?} Ist ein optionaler Param, optionale Params sollten ein '?' Am Ende ihrer Namen und sollte einen Standardwert in der Methode des Controllers haben. Andernfalls wird das Programm eine 404: Not Found Nachricht erbracht, da ein optionaler Param nicht angegeben wurde und keinen Standardwert hat.
Beim Einstellen einer benutzerdefinierten Route können Sie einen variablen Param in die route , controller oder action einfügen, um eine allgemeinere benutzerdefinierte Route zu erstellen.
Beispiel:
Route:: get ( ' custom/{var_controller}/pattern/{action}/{param1} ' , ' Web ' , ' {var_controller} ' , ' {action} ' ); Jede URL, die custom/{var_controller}/pattern/{action}/{param1} entspricht
wird weitergeleitet an: Route: Web , Controller: {var_controller} , action: {action} und Parameter werden weder {var_controller} noch {action} enthalten, da sie in der Routing verwendet wurden.
Wenn also eine Anforderung mit URL = Custom / Account / Muster / View / sherifabdlnaby geliefert wird, wird sie auf: Route: Web , Controller: Account , Aktion: View und Params [0] = ' sherifabdlnaby ' geleitet.
Controller ist verantwortlich für die Verarbeitung von Benutzernanfragen und für die Rückgabe der Ausgabe für den Benutzer entweder als HTML für WebControllers oder JSONRESULT für ApiControllers oder um ein anderes Ziel weiterzuleiten.
Das Controllers -Verzeichnis sollte mit dem Namespace des Controllers übereinstimmen und wie folgt Controllers{route}{ControllerName}Controller.php und die Verwendung des Namespace AppControllers{route} anhand {route} die Route, an der dieser Controller gehört.
+---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.
Ein Controller verfügt über 4 geschützte Variablen, die er verwendet:
$ 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)Die Ausgabe eines Controllers (und dem, was der Benutzer sieht) wird durch ihn zurückgegeben .
Controller in CIRO haben verschiedene Funktionen, die bei der Rückgabe der Ausgabe innerhalb von Controllern verwendet werden müssen, um diese Aufgaben zu erleichtern.
Render rendert eine HTML -Webseite mit einem Layout. Ein Layout enthält Header, Metadatenabschnitt, Warnungen, Körper und Fußzeile. Der Körperabschnitt des Layouts wird gemäß dem Methode des Controllers -ViewPaths bestimmt.
Die Ansicht des Controllers verwendet das $ Data [] -Array, um seine Elemente zu rendern, und im Abschnitt Metadaten verwendet das $ meta [] -Array.
render ( $ layout = null , $ viewPath = null , & $ data = null , & $ meta = null );| Arg | Beschreibung | Standardwert |
|---|---|---|
$layout | Gibt das Ansichtslayout an, das zum Rendern verwendet wird | Standard -Layout in config.php angegeben |
$viewPath | Gibt den Pfad für die Ansicht zum Rendern an | Ansicht gemäß dem Methodennamen des Controllers bestimmt |
$data | Die $data array () -Ansicht hat ebenfalls Zugriff | Das $data -Array des Controllers () () |
$meta | Das $meta array () -Layout hat ebenfalls Zugriff | Der $meta array des Controllers () |
return $this->render(); Ohne bestimmte Argumente (unter Verwendung von Standardwerten) sind in 90% der Fälle ausreichend.
Grundnutzung von $ this -> render ();
class AccountController extends WebController {
public function View ( $ username ){
$ this -> data [ ' name ' ] = $ username ;
return $ this -> render ();
}
}Renderfullerror und Renderfullmessage machen eine benutzerdefinierte Nachrichten-/Fehlerseite. Wenn im 2. Parameter ein Statuscode angegeben ist, senden Sie den entsprechenden HTTP -Statuscode -Header und rendern die Ansicht dieses Codes.
function renderFullError( $ message , $ statusCode = null , $ layout = null );
function renderFullMessage( $ message , $ statusCode = null , $ layout = null );| Arg | Beschreibung | Standardwert |
|---|---|---|
$message | Eine Nachricht, die in der Ansicht wiedergegeben werden soll. | Keine (erforderliches Feld) |
$statusCode | HTTP -Statuscode | NULL |
$layout | Gibt das Ansichtslayout an, das zum Rendern verwendet wird | Standard -Layout in config.php angegeben |
Grundlegende Verwendung von $ 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 );
}
}Wenn während der Skriptausführung eine Ausnahme erhöht wurde, macht das Framework eine Seite mit einem internen Serverfehler -Fehler mit 500 Server -Fehler.
Bei der Rückgabe von $ this -> return () von einem Controller wird keine Ausgabe an den Benutzer gesendet, aber der Benutzer wird in die angegebene URL weitergeleitet.
function redirect( $ path );| Arg | Beschreibung | Standardwert |
|---|---|---|
| $ path | Ein Relative oder Full Weg, um umgeleitet zu werden | Keine (erforderliches Feld) |
Grundlegende Verwendung von $ this -> recirect ();
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 );
}
}Überprüfen Sie, ob der Benutzer/N nicht angemeldet ist, und leiten Sie es auf Homepage/Login weiter.
Diese Funktionen werden nicht per Return -Anweisung verwendet. Es stoppt jedoch das Skript, wenn er den Benutzer umleitet. Dies bedeutet, dass ein Code unter diesen Funktionen nicht ausgeführt wird, wenn ihre Validierung falsch ist.
function verifyLoggedIn();
function verifyNotLoggedIn();Grundlegende Verwendung von $ 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 );
}
} Die Sitzungsklasse ist eine erweiterbare Klasse, die die Verwendung von $ _ SESSION über die Programme hinweg verwaltet, um das Prinzip der einzelnen Verantwortung durchzusetzen.
/* 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 );Warnungen sind Flash-Nachrichten, die in den Sitzungen des Benutzers gespeichert sind. Dann können Warnungen dem Benutzer angezeigt werden, indem sie entweder als HTML-Rendern oder in JSON-In-Case einer API codiert werden.
Warnungen können verwendet werden, um Fehler über die Formvalidierung oder eine Nachricht anzuzeigen, wenn ein Prozess erfolgreich ist oder fehlgeschlagen ist.
Warnungen haben einen eigenen Abschnitt in jedem Layout, Controller -> Render (), die in der Benutzersitzung gespeichert werden.
Es gibt 4 Arten von Warnungen:

Ein Layout ist die Struktur der HTML -Webseite, die aus 5 Abschnitten besteht
| Abschnitt | Beschreibung |
|---|---|
| Meta | Dieser Abschnitt macht HTML -Metadaten -Tags für Titel-, Desc- und SEO -Tags. Metadaten haben von Controller bestanden und gefüllt und im $ meta Array () zugänglich |
| Kopfball | In diesem Abschnitt wird der Seitenkopf für die Seite |
| Warnungen | In diesem Abschnitt wurde in der Sitzung des Benutzers benachrichtigt, falls vorhanden, gespeichert |
| Inhalt | In diesem Abschnitt ist der Hauptteil der Seite und verfügt über die Daten, die vom Controller bestanden und gefüllt werden können |
| Fußzeile | Dieser Abschnitt macht die Seitenfußzeile |
+---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 ist die endgültige Datei, die beim Rendern des Layouts wiedergegeben wird. Die Struktur geht über die usw. und alle CSS/JS, die in diesem Layout verwendet werden
<!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 > 
Eine Ansicht ist die Ausgabe der Aktion eines Webcontrollers. Eine Ansicht verfügt über ein $ Data Assoc -Array, das vom Controller übergeben wird. Es wird verwendet, um Daten zwischen Controller und Ansicht zu übergeben. Der Ansichtsposition muss mit der Controller -Pfad-/Namespace -Struktur übereinstimmen.
View des Account Controller in der Web +---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 aktiviert/deaktiviert werden.Datenbank -Helferklassen werden verwendet, um eine Singleton -Instanz für Datenbankverbindungen zu erhalten, in der Verbindungsanmeldeinformationen in Konfigurationsdateien gespeichert werden.
| Klasse | Verlängerung | Beschreibung |
|---|---|---|
| Dbpdo | PDO | Eine Singleton -Klasse für die PDO -DB -Erweiterung, PDO, kann verwendet werden, um eine Verbindung zu verschiedenen RDBMs wie MySQL, Mariadb oder PostgreSQL herzustellen. Verbindungsanmeldeinformationen, die auf Configpdo.php eingestellt und unter Config/config.php aktiviert sind |
| DBSQL | Mysqli | Eine Singleton -Klasse für die MySQLI -Erweiterung, Verbindungsanmeldeinformationen für MySQL Set auf Configmysqli.php und aktiviert unter Config/config.php |
| Dbmongo | mongodb unter Verwendung MongoDB PHP Library (PHP 7.0+) | Eine Singleton-Klasse für eine Verbindung der MongoDB-PHP-Bibliothek, die sich um mongodb Erweiterung auf niedriger Ebene basiert. Die Anmeldeinformationen werden unter Configmongo.php gespeichert und unter Config/config.php aktiviert |
mongodb -Erweiterung und MongoDB PHP Library , für die beide PHP 7.0+ benötigen composer require mongodb/mongodbCiro PHP Framework steht unter der MIT -Lizenz. Sie können die Lizenz hier anzeigen.