
CIRO adalah kerangka kerja PHP MVC untuk memulai proyek dengan cepat, dirancang untuk menjadi sederhana, dapat dikonfigurasi, modular, dipisahkan, dapat diperluas dan ringan untuk membuatnya lebih mudah untuk membangun kode PHP yang lebih baik dan mudah dipelihara.
Di luar kotak Ciro datang dengan:
CIRO dilengkapi dengan proyek templat dengan sistem otentikasi sederhana untuk memulai proyek atau prototipe Anda.
Contoh online dari Proyek Template Kerangka: https://ciro-framework.herokuapp.com
C:xampphtdocs untuk Windows atau /Applications/XAMPP/xamppfiles/htdocs untuk Mac.httpd.conf Apache XAMPP ke direktori Ciro, lihat instruksi: di sini.Untuk menggunakan login/register yang sudah dibuat, dan Anda menggunakan SQL (bukan Mongo), Anda harus membuat database dan tabel di SQL.
http://localhost/phpmyadmin dan jalankan kueri di sql_database_script.sql yang ada di direktori root. Untuk menggunakan login/register yang sudah dibuat, dan Anda ingin menggunakan MongoDB, Anda harus menginstal mongodb extension dan MongoDB PHP Library menggunakan komposer, instruksi di sini. Juga ganti Models/UserRepository.php dengan Models.disabled.mongo.userrepository.class.php untuk menggunakan versi MongoDB.
Mysqli untuk mysql.PDO untuk RDBMS yang didukung PDO.MongoDB (PHP 7.0+).Semua dapat dikonfigurasi melalui file konfigurasi.

Struktur proyek mengikuti spesifikasi PSR-4 namespaced.
+---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.
Di CIRO rute URL default memiliki struktur berikut:
http://example.io/{route}/{controller}/{action}/{param1?}/{param2?}/...
URL ini diselesaikan dengan metode {action} dari controller {controller} dalam controllers/{route} jadi dalam notasi php oop sesuai dengan:
App Controllers { route }{controller} -> { action } Dalam konfigurasi Config/config.php , Anda dapat menentukan 'default_route' jadi jika URL tidak berisi rute, program akan rute sesuai dengan rute default. Secara default 'default_route' adalah 'web'. Jadi, URL khas menggunakan rute default akan memiliki struktur berikut:
http://example.io/{controller}/{action}/{param1?}/{param2?}/...
Jadi dalam notasi PHP OOP sesuai dengan:
App Controllers Web {controller} -> { action }Contoh lain:
for $id
http://example.io/{controller}/{action}/{param1}
http://example.io/ Product / View / 6800
Jika URL tidak menentukan {action} , program untuk merutekan ke 'Default_Action' yang ditentukan dalam 'config/config.php'.
Jika URL tidak menentukan {controller} , program untuk merutekan ke 'default_controller' yang ditentukan dalam 'config/config.php'.
Untuk menambahkan rute baru dan mengaksesnya menggunakan routing default, Anda harus menambahkannya di tabel routing Config/config.php .
Mengingat URL ini misalnya:
for $id $color
http://example.io/{controller}/{action}/{param1}/{param2}
http://example.io/ Product / View / 6800 / red
Params dapat diakses di dalam metode pengontrol melalui $this -> params[0..*] array, misalnya $this->params[0] memegang nilai {param1} dalam url di atas.
Cara lain untuk mengakses params di dalam metode pengontrol adalah dengan menambahkan argumen ke metode pengontrol itu sendiri. Menggunakan contoh yang sama di atas, jika ProductController -> View didefinisikan seperti ini:
class ProductController extends WebController {
public function view ( $ id , $ color = ' white ' ){
/* controller's method code here */
}
} $id akan memiliki nilai {param1} , $color akan memiliki nilai {param2} dan sebagainya ...
Perhatikan bahwa jika {param2} tidak ada di URL, $color akan menggunakan nilai default yang ditentukan, namun jika {param1} tidak ada di URL, program akan membuat 404: Not Found pesan karena $id tidak memiliki nilai default yang ditentukan dalam metode pengontrol.
Rute khusus memberi Anda kemungkinan untuk menentukan URL dengan pola spesifik yang jika dicocokkan URL dialihkan ke {route}{controller}::{action} dengan params yang ditentukan dengan tepat.
Rute khusus dapat diaktifkan/dinonaktifkan di Config/config.php .
Anda dapat menentukan rute khusus untuk setiap kata kerja http istirahat misalnya ( GET, POST, PUT, DELETE, etc ) atau tentukan rute khusus untuk semua kata kerja http yang mungkin menggunakan:
// 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 ();Rute khusus didefinisikan dalam /config/routes.php .
Route:: get ( ' custom/route/{id}/{name}/{language?} ' , ' Web ' , ' Home ' , ' CustomRouteAction ' ); URL apa pun yang cocok dengan custom/route/{id}/{name}/{language?} Akan dialihkan ke: rute: Web Controller: Home Action: CustomRouteAction .
{ name } , params opsional harus memiliki '?' Di akhir nama mereka { optinoalParam? } .$this -> params[0..*] array dan masing -masing dipesan sesuai urutan mereka di URL.$this -> param[0] sesuai dengan {id} , $this -> param[1] sesuai dengan {name} , dllMetode pengontrol rute khusus harus didefinisikan sebagai berikut:
class HomeController extends WebController {
public function CustomRouteAction ( $ id , $ name , $ language = ' default ' ){
/* controller's method code here */
}
} Catatan dalam contoh di atas: {language?} Apakah param opsional, param opsional harus memiliki '?' Di akhir nama mereka, dan harus memiliki nilai default dalam metode pengontrol, jika tidak jika param tidak ada, program akan membuat 404: Not Found pesan karena param opsional tidak diberikan dan tidak memiliki nilai default.
Saat mengatur rute khusus, Anda dapat menempatkan param variabel di route target, controller atau action untuk membuat rute khusus yang lebih 'umum'.
Contoh:
Route:: get ( ' custom/{var_controller}/pattern/{action}/{param1} ' , ' Web ' , ' {var_controller} ' , ' {action} ' ); URL apa pun yang cocok dengan custom/{var_controller}/pattern/{action}/{param1}
akan dialihkan ke: route: Web , controller: {var_controller} , action: {action} dan params tidak akan termasuk {var_controller} atau {action} karena mereka digunakan dalam perutean.
Jadi jika permintaan dengan url = kustom / Account / pola / View / sherifabdlnaby datang, itu akan dialihkan ke: rute: Web , controller: Account , tindakan: View dan params [0] = ' sherifabdlnaby '
Controller bertanggung jawab untuk memproses permintaan pengguna dan mengembalikan output untuk pengguna baik sebagai HTML untuk WebControllers , atau JSONRESULT untuk ApiControllers , atau mengarahkan ulang ke tujuan lain.
Direktori pengontrol harus cocok dengan namespace pengontrol dan harus sebagai berikut Controllers{route}{ControllerName}Controller.php dan menggunakan AppControllers{route} di mana {route} adalah rute tempat pengontrol ini berada.
+---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.
Pengontrol memiliki 4 variabel yang dilindungi yang digunakannya:
$ 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)Output dari pengontrol (dan apa yang dilihat pengguna) adalah apa yang dikembalikan melalui itu.
Pengontrol di CIRO memiliki berbagai fungsi untuk digunakan saat mengembalikan output di dalam pengontrol untuk memudahkan tugas -tugas ini.
Render akan membuat halaman web HTML menggunakan tata letak, tata letak berisi header, bagian metadata, peringatan, tubuh, dan footer. Bagian tubuh dari tata letak ditentukan sesuai dengan metode viewpath pengontrol.
Tampilan pengontrol menggunakan array $ data [] untuk membuat elemennya, dan bagian Metadata menggunakan array $ meta [].
render ( $ layout = null , $ viewPath = null , & $ data = null , & $ meta = null );| Arg | Keterangan | Nilai default |
|---|---|---|
$layout | Menentukan tata letak tampilan yang digunakan untuk membuat | Tata letak default yang ditentukan dalam config.php |
$viewPath | Menentukan jalur untuk diterjemahkan oleh tampilan | Lihat ditentukan sesuai dengan nama metode pengontrol |
$data | Tampilan $data array () akan memiliki akses juga | Pengendali sendiri $data Array () |
$meta | tata letak $meta array () akan memiliki akses juga | Pengontrol $meta Array () |
mengembalikan $this->render(); Tanpa argumen yang diberikan (menggunakan nilai default) akan cukup pada 90% kasus.
Penggunaan dasar $ this -> render ();
class AccountController extends WebController {
public function View ( $ username ){
$ this -> data [ ' name ' ] = $ username ;
return $ this -> render ();
}
}Renderfullerror dan RenderfullMessage akan membuat halaman pesan/kesalahan khusus. Jika kode status diberikan dalam parameter ke -2, pengontrol, kirim header kode status HTTP yang sesuai dan membuat tampilan kode ini.
function renderFullError( $ message , $ statusCode = null , $ layout = null );
function renderFullMessage( $ message , $ statusCode = null , $ layout = null );| Arg | Keterangan | Nilai default |
|---|---|---|
$message | Pesan yang akan diterjemahkan dalam tampilan. | Tidak ada (bidang yang diperlukan) |
$statusCode | Kode Status HTTP | batal |
$layout | Menentukan tata letak tampilan yang digunakan untuk membuat | Tata letak default yang ditentukan dalam config.php |
Penggunaan dasar $ 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 );
}
}Jika ada pengecualian yang dinaikkan selama eksekusi skrip, kerangka kerja akan membuat 500 halaman kesalahan kustom kesalahan server internal.
Saat mengembalikan $ this -> return () dari output controller tidak dikirim ke pengguna tetapi pengguna dialihkan ke URL yang diberikan.
function redirect( $ path );| Arg | Keterangan | Nilai default |
|---|---|---|
| $ path | Jalur Relative atau Full untuk diarahkan ke | Tidak ada (bidang yang diperlukan) |
Penggunaan dasar $ 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 );
}
}Periksa apakah pengguna/n't masuk, redirect ke beranda/login jika tidak.
Fungsi -fungsi ini tidak digunakan dengan pernyataan pengembalian, namun menghentikan skrip jika mereka mengarahkan kembali pengguna, yang berarti kode apa pun di bawah fungsi ini tidak akan dieksekusi jika validasinya salah;
function verifyLoggedIn();
function verifyNotLoggedIn();Penggunaan Dasar $ 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 );
}
} Kelas sesi adalah kelas yang dapat diperluas yang akan mengelola penggunaan SESSION $ _ di seluruh program untuk menegakkan prinsip tanggung jawab tunggal.
/* 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 );Peringatan adalah pesan flash yang disimpan dalam sesi pengguna, peringatan kemudian dapat ditunjukkan kepada pengguna baik dengan rendering sebagai HTML atau mengkodenya dalam JSON dalam kasus API.
Lansiran dapat digunakan untuk menunjukkan kesalahan tentang validasi formulir, atau pesan jika suatu proses berhasil atau gagal.
Lansiran memiliki bagian mereka sendiri dalam fungsi tata letak, controller -> render () akan membuat peringatan apa pun yang disimpan dalam sesi pengguna.
Ada 4 jenis peringatan:

Tata letak adalah struktur halaman web HTML, terdiri dari 5 bagian
| Bagian | Keterangan |
|---|---|
| meta | Bagian ini membuat tag metadata html untuk judul, tag desc dan SEO. Metadata lulus dan diisi oleh pengontrol dan dapat diakses di $ meta array () |
| header | Bagian ini membuat header halaman |
| peringatan | Bagian ini membuat peringatan yang disimpan dalam sesi pengguna jika ada |
| isi | Bagian ini membuat bagian utama dari halaman, dan datanya dilewati dan diisi oleh pengontrol |
| footer | Bagian ini membuat footer halaman |
+---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
tata letak.html adalah file akhir yang diterjemahkan saat membuat tata letak, itu adalah struktur yang melampaui yang, dll dan css/js yang digunakan dalam tata letak ini harus dimasukkan dalam tata letak.html seperti bootstrap CSS dan 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 > 
Tampilan adalah output dari tindakan pengontrol web, sebuah tampilan memiliki array $ data asosiasi yang dilewatkan oleh pengontrol, digunakan untuk meneruskan data antara pengontrol dan tampilan. Lokasi tampilan harus cocok dengan struktur jalur pengontrol/namespace.
View Tindakan Account Controller di Rute 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 .Kelas pembantu basis data digunakan untuk mendapatkan instance singleton untuk koneksi basis data, di mana kredensial koneksi disimpan dalam file konfigurasi.
| Kelas | Perpanjangan | Keterangan |
|---|---|---|
| Dbpdo | PDO | Kelas Singleton untuk Ekstensi DB PDO, PDO dapat digunakan untuk terhubung ke berbagai RDBM seperti MySQL, MariaDB, atau PostgreSQL, kredensial koneksi yang diatur di Configpdo.php dan diaktifkan di Config/config.php |
| DBSQL | Mysqli | Kelas singleton untuk ekstensi mysqli, kredensial koneksi untuk mysql diatur di Configmysqli.php dan diaktifkan di Config/config.php |
| Dbmongo | mongodb Menggunakan MongoDB PHP Library (PHP 7.0+) | Kelas singleton untuk koneksi perpustakaan php mongoDB yang dibangun di sekitar ekstensi mongodb tingkat rendah, kredensial disimpan di Configmongo.php dan diaktifkan di Config/config.php |
mongodb dan MongoDB PHP Library , yang keduanya membutuhkan PHP 7.0+ composer require mongodb/mongodbKerangka kerja CIRO PHP berada di bawah lisensi MIT, Anda dapat melihat lisensi di sini.