เฟรมเวิร์ก PHP ที่ง่ายมากสำหรับการพัฒนาเว็บ!
V2 กำลังจะมาเร็ว ๆ นี้ ... ตรวจสอบสาขาเบต้า!
| โฟลเดอร์ | คำอธิบาย |
|---|---|
| ผู้ควบคุม | มีโครงสร้างและไฟล์ของรหัสของคอนโทรลเลอร์ |
| แบบอย่าง | มีไดเรกทอรีและไฟล์สำหรับรหัสรุ่น |
| ดู | มีไฟล์เทมเพลต |
| แคช | ที่เก็บแคชเริ่มต้นที่เขียนได้เต็มรูปแบบ |
| public_html | มีไฟล์ index.php และ. htaccess apache ไฟล์สาธารณะการเข้าถึงทั้งหมดของคุณอยู่ที่นี่เช่น CSS, JavaScript ฯลฯ |
| ระบบ | โฟลเดอร์ที่สำคัญที่สุดของกรอบนี้ มีคุณสมบัติไลบรารีคลาสและคุณสมบัติอื่น ๆ เพื่อปรับปรุงการทำงานที่ถูกต้องสำหรับเว็บแอป |
| ท่อนไม้ | มีบันทึกการดีบักและข้อผิดพลาด |
| config.php | ไฟล์ที่มีการกำหนดค่าพื้นฐานทั้งหมดสำหรับเว็บแอปเช่นการเชื่อมต่อ DB, การกำหนดค่าจดหมาย, การกำหนดค่าไดเรกทอรี ฯลฯ |
คัดลอกหรือโคลนที่เก็บนี้ในคอมพิวเตอร์/เซิร์ฟเวอร์ของคุณและแก้ไขไฟล์ config.php ดูด้านล่างตัวเลือกพื้นฐานไฟล์ config
นี่คือ Hello World ที่เรียบง่าย! สำหรับกรอบนี้
ในโฟลเดอร์ คอนโทรลเลอร์ สร้างโฟลเดอร์ที่เรียกว่า Common และสร้างไฟล์ที่เรียกว่า home.php
แก้ไข คอนโทรลเลอร์/สามัญ/home.php เช่นนั้น
<?php
class ControllerCommonHome extends Controller {
public function index () {
$ this -> data [ ' variable ' ] = " Hello World! " ;
$ this -> out ();
}
}ตอนนี้สร้างโฟลเดอร์ภายในมุมมองที่เรียกว่า ค่าเริ่มต้น และโฟลเดอร์ย่อยที่เรียกว่า Common และไฟล์ home.twig
แก้ไข มุมมอง/ค่าเริ่มต้น/สามัญ/home.twig เช่นนี้
< h1 > {{ variable }} </ h1 >เปลี่ยนชื่อ config.dist.php เป็น config.php และแก้ไขค่าคง ที่ http_url และ dir_application ในไฟล์ config.php แก้ไขเส้นทางอื่น ๆ DIR_* เส้นทางค่าคงที่หากจำเป็น
<?php
define ( ' HTTP_URL ' , ' http://phacil.local/ ' );
define ( ' HTTPS_URL ' , HTTP_URL );
define ( ' HTTP_IMAGE ' , HTTP_URL );
define ( ' USE_DB_CONFIG ' , false );
define ( ' DEBUG ' , true );
$ configs = array (
' PatternSiteTitle ' => ' - ExacTI phacil ' ,
' config_mail_protocol ' => ' smtp ' ,
' config_error_display ' => 1 ,
' config_template ' => " default " ,
' config_error_filename ' => ' error.log ' );
//App folders
define ( ' DIR_APPLICATION ' , ' /Applications/MAMP/htdocs/phacil/ ' );
define ( ' DIR_LOGS ' , DIR_APPLICATION . ' logs/ ' );
define ( ' DIR_PUBLIC ' , DIR_APPLICATION . ' public_html/ ' );
define ( ' DIR_SYSTEM ' , DIR_APPLICATION . ' system/ ' );
define ( ' DIR_IMAGE ' , DIR_APPLICATION . ' public_html/imagens/ ' );
define ( ' DIR_TEMPLATE ' , DIR_APPLICATION . ' view/ ' );
define ( ' DIR_CACHE ' , DIR_APPLICATION . ' cache/ ' );ชี้เซิร์ฟเวอร์ HTTP/PHP ของคุณไปที่โฟลเดอร์ public_html เข้าถึงเว็บแอปของคุณในเบราว์เซอร์ที่คุณชื่นชอบและเพลิดเพลินไปกับ Hello World นี้!
เส้นทางทั้งหมดเป็นคลาสการแมปที่มีการขยายคลาสคอนโทรลเลอร์หลัก ในคำศัพท์ง่าย ๆ ชื่อคลาสในคอนโทรลเลอร์คือ ชื่อไฟล์ โฟลเดอร์ คอนโทรลเลอร์
class ControllerFolderFile extends Controller { }
ฟังก์ชั่นสาธารณะชื่อ index() เป็นฟังก์ชันเริ่มต้นในการสร้างหน้า
public function index() { }
Array $this->data ได้รับในรูปแบบอาร์เรย์ตัวแปรเพื่อส่งไปยังเทมเพลตในตัวอย่างนี้เรียกว่า ตัวแปร ด้วยสตริง สวัสดีโลก! -
ในช่วงสุดท้ายที่เราจบด้วย $this->out(); เพื่อระบุไฟล์ผลลัพธ์และเทมเพลตกระบวนการ มันเป็นกลไกอัตโนมัติในการเชื่อมโยงคอนโทรลเลอร์นี้กับผู้ชมที่เกี่ยวข้อง
ผู้ชมในตัวอย่างนี้เป็นรูปแบบเทมเพลตกิ่งไม้ (หน้าทวิก) เฟรมเวิร์ก Exacti Phacil อนุญาตให้ใช้เครื่องยนต์เทมเพลต PHP ต่างๆเช่นกิ่งไม้หนวด Dwoo และ Smarty
คำอธิบายง่ายๆของการกำหนดค่าค่าคงที่เริ่มต้นในไฟล์ config.php
| คงที่ | พิมพ์ | คำอธิบาย | ที่จำเป็น |
|---|---|---|---|
| http_url | สาย | มี URL สำหรับเว็บแอปนี้ | ใช่ |
| https_url | สาย | เหมือนกัน http_url นี้ แต่ในรูปแบบ SSL | |
| http_image | สาย | URL ภาพ | |
| CDN | สาย | CDN URL เพื่อใช้สำหรับเนื้อหาคงที่ | |
| db_config | บูลีน | อนุญาตให้ใช้การกำหนดค่าโดยตรงในฐานข้อมูล ต้องมีการติดตั้งฐานข้อมูล ค่า: จริงหรือเท็จ | ใช่ |
| การดีบัก | บูลีน | ระบุโหมดการดีบัก | ใช่ |
$configs | อาร์เรย์ | ไม่มีการกำหนดค่า SQL | |
| dir_application | สาย | เส้นทางที่แน่นอนไปยังโฟลเดอร์แอปพลิเคชัน | ใช่ |
| dir_logs | สาย | เส้นทางสู่บันทึกโฟลเดอร์ | |
| dir_public | สาย | เส้นทางสู่โฟลเดอร์สาธารณะ ไดเรกทอรีนี้เป็นไดเรกทอรีสำหรับกำหนดค่าในเซิร์ฟเวอร์ HTTP ของคุณ | ใช่ |
| dir_system | สาย | ไดเรกทอรีระบบ | ใช่ |
| dir_image | สาย | ไดเรกทอรีเพื่อจัดเก็บภาพที่ใช้โดย Image Library | |
| dir_template | สาย | ไดเรกทอรีด้วยโฟลเดอร์เทมเพลต | ใช่ |
| dir_cache | สาย | ไดเรกทอรีเพื่อจัดเก็บแคชที่สร้างขึ้น | ใช่ |
| cache_expire | การประทับเวลา | เวลาในรูปแบบ UNIX Timestamp ด้วยวินาทีสำหรับแคชที่ถูกต้อง ค่าเริ่มต้นคือ 3600 (1 ชั่วโมง) | |
| use_phpfastcache | บูลีน | เปิดใช้งานไลบรารี PHPFastCache สำหรับทรัพยากรแคช | |
| cache_driver | สาย | วิธีแคชสำหรับ phpfastcache ค่าเริ่มต้นคือไฟล์ | |
| cache_settings | อาร์เรย์ | การตั้งค่าสำหรับ phpfastcache (https://www.phpfastcache.com) | |
| dir_config | สาย | ไดเรกทอรีที่มีไฟล์ configs พิเศษ | |
| db_driver | สาย | ไดรเวอร์เพื่อเชื่อมต่อแหล่งฐานข้อมูล ดูด้านล่างไดรเวอร์เริ่มต้นที่มีอยู่ | |
| db_hostname | สาย | โฮสต์ฐานข้อมูล | |
| db_username | สาย | ชื่อผู้ใช้เพื่อเชื่อมต่อฐานข้อมูล | |
| db_password | สาย | รหัสผ่านฐานข้อมูล | |
| db_database | สาย | ชื่อฐานข้อมูล | |
| sql_cache | บูลีน | ใช้ระบบแคช SEPEL SQL | |
| เส้นทาง | อาร์เรย์ | ระบุเส้นทางด้วยตนเอง | |
| default_route | สาย | กำหนดเส้นทางเริ่มต้นที่จะสมมติกับหน้าเริ่มต้น ค่าเริ่มต้นเป็น เรื่องธรรมดา/บ้าน | |
| custom_db_config | สาย | SQL ที่กำหนดเองเพื่อโหลดการกำหนดค่าแอปพลิเคชันในฐานข้อมูล | |
| NOT_FOUND | สาย | เส้นทางที่กำหนดเองไปยังหน้าไม่พบ ค่าเริ่มต้นคือข้อผิดพลาด/not_found | |
| session_prefix | สาย | คำนำหน้าคุกกี้เซสชันที่กำหนดเอง ค่าเริ่มต้นคือเซส |
เฟรมเวิร์ก Phacil นับด้วยสามวิธีสำหรับเนื้อหาเอาต์พุต: $this->response->setOutput() , $this->render() และ $this->out()
เมื่อคุณเรียก $this->response->setOutput ภายในคอนโทรลเลอร์คุณระบุเอาต์พุตของเนื้อหาไปยังหน้าจอโดยไม่ต้องเทมเพลต มันมีประโยชน์มากสำหรับเนื้อหาข้อมูล JSON, XML หรืออื่น ๆ
<?php
class ControllerDemoSample extends Controller {
public function index () {
$ variable = ' value ' ;
$ this -> response -> setOutput ( $ variable );
// prints "value" in screen
}
} $this->render เพียงแค่แสดงตัวควบคุมด้วยเทมเพลต แต่ไม่ส่งออกสิ่งนี้ จำเป็นต้องระบุ $this->template เพื่อเชื่อมโยงกับไฟล์เทมเพลต มันใช้มากในคอนโทรลเลอร์ของเด็กเช่นส่วนหัวและส่วนท้าย
<?php
class ControllerCommonHeader extends Controller {
public function index () {
$ variable = ' value ' ;
$ this -> template = ' default/common/header.twig ' ;
$ this -> render ();
}
} $this->out เป็นวิธีที่ชาญฉลาดในการส่งออกเนื้อหาเพื่อหน้าจอและรวมการแสดงผลกับเทมเพลตการเชื่อมโยง สำหรับตัวอย่างหากคุณมีคอนโทรลเลอร์ในไฟล์ที่เรียกว่า sample.php ภายในโฟลเดอร์คอนโทรลเลอร์ demo และผู้ชมที่เรียกว่า sample.twig ภายใน demo ดูตัวอย่างการเชื่อมโยงโดยอัตโนมัติและ $this->template ไม่จำเป็น (เว้นแต่คุณต้องการระบุเทมเพลตอื่นที่มีชื่ออื่น) หากคุณระบุ $this->out(false) ส่วนหัว "ส่วนท้าย" และ "ส่วนท้าย" ของ Auto Childrens
สำหรับฟังก์ชั่นภายในคอนโทรลเลอร์ที่แตกต่างจากดัชนีสำหรับการแมปอัตโนมัติด้วยเทมเพลตจำเป็นต้องเพิ่มขีดล่าง (_) หลังจากชื่อคอนโทรลเลอร์และเพิ่มชื่อฟังก์ชั่น (เช่น: contact_work.twig เพื่อเชื่อมโยงกับเส้นทางทั่วไป/ติดต่อ/งานดูส่วน เส้นทาง สำหรับข้อมูลเพิ่มเติม)
<?php
class ControllerCommonContact extends Controller {
public function index () {
$ this -> document -> setTitle ( ' Contact Us ' );
$ this -> out ();
// automatically link with common/contact.twig template
}
public function work () {
$ this -> document -> setTitle ( ' Work with Us ' );
$ this -> out ();
// automatically link with common/contact_work.twig template
}
}เฟรมเวิร์กนี้รองรับเครื่องยนต์เทมเพลต PHP นี้:
ในการใช้เอ็นจิ้นเทมเพลตที่กำหนดเพียงสร้างไฟล์ที่มีชื่อของเอ็นจิ้นในส่วนขยายสำหรับตัวอย่างหากคุณต้องการใช้กิ่งไม้ไฟล์เทมเพลตคือ demo.twig หากต้องการเทมเพลตหนวดให้ใช้ไฟล์ส่วนขยาย demo.mustache เฟรมเวิร์ก Exacti Phacil ช่วยให้สามารถใช้เครื่องยนต์แม่แบบต่างๆในโครงการเดียวกัน
เฟรมเวิร์กนี้มุ่งเน้นไปที่ความคล่องตัวความปลอดภัยและรหัสที่นำกลับมาใช้ใหม่ใน PHP มีฟังก์ชั่น Utils มากที่เราเห็นในส่วนถัดไป
เพื่อดำเนินการค้นหา:
$ variable = $ this -> db -> query ( " SELECT * FROM mundo " );ไม่มีแคช SQL (หากเปิดใช้งานการกำหนดค่า):
$ variable = $ this -> db -> query ( " SELECT * FROM mundo " , false ); ค่าหลบหนีไปสู่ความปลอดภัยมากขึ้น (ไม่มีปัญหาการฉีด SQL): $this->db->escape($value)
เพื่อให้ได้แถวเหล่านี้: $variable->rows ;
รับหนึ่งแถว: $variable->row ;
จำนวนแถว: $variable->num_rows ;
<?php
class ModelDemoSample extends Model {
public $ data = array ();
public function dataSample ( $ code ) {
$ variable = $ this -> db -> query ( " SELECT * FROM settings WHERE code = ' " . $ this -> db -> escape ( $ code ). " ' " );
$ this -> data [ ' rows ' ] = $ variable -> rows ;
$ this -> data [ ' totalRecords ' ] = $ variable -> num_rows ;
return $ this -> data ;
}
}| คนขับรถ | ประเภทฐานข้อมูล | คำอธิบาย |
|---|---|---|
| db_pdo | มาเรียบ์ | การเชื่อมต่อ PDO ที่ได้รับการปรับปรุงให้ดีที่สุดเพื่อทำงานกับฐานข้อมูล Mariadb ด้วย Charset UTF8MB4 ยังทำงานได้ดีกับ MySQL |
| dbmysqli | mysql/mariadb | การเชื่อมต่อ Mysqli PHP |
| MSSQL | MS SQL Server | ใช้ส่วนขยาย MSSQL PHP สำหรับเชื่อมต่อกับฐานข้อมูล Microsoft SQL Server |
| MPDO | mysql | การเชื่อมต่อ PDO สำหรับฐานข้อมูล MySQL |
| mysql | mysql | มรดก MySQL Extension ใช้งานได้เฉพาะใน PHP 5 |
| คำพยากรณ์ | คำพยากรณ์ | เชื่อมต่อกับฐานข้อมูล Oracle |
| โพสต์สีเทา | PostgreSQL | ไดรเวอร์สำหรับการเชื่อมต่อกับฐานข้อมูล PostgreSQL |
| SQLSRV | MS SQL Server | เชื่อมต่อฐานข้อมูล Microsoft SQL Server กับส่วนขยาย SQLSRV PHP |
| sqlsrvpdo | MS SQL Server | เชื่อมต่อกับ Microsoft SQL Server โดยใช้ไดรเวอร์ PDO |
| sqlite3_db | sqlite 3 | ใช้ฐานข้อมูล sqlite 3 |
เฟรมเวิร์กนี้มีไลบรารี phpfastcache (https://www.phpfastcache.com) เพื่อให้ระบบแคชที่มีประสิทธิภาพมากที่สุดมีความเป็นไปได้มากมายเช่น Mencache, Redis, APC หรือแคชไฟล์ง่าย ๆ ในการเปิดใช้งานไลบรารีนี้ให้กำหนดค่าคงที่ use_phpfastcache เป็นจริง ใช้งานได้เฉพาะใน PHP 7 หรือใหม่กว่า หากคุณไม่ได้ตั้งค่า use_phpfastcache หรือใช้ PHP รุ่นเก่ากว่าการตั้งค่า PHACIL Automatic เป็นระบบแคชไฟล์ภายในอย่างง่าย
| ไดรเวอร์ปกติ | ไดรเวอร์ที่มีประสิทธิภาพสูง | ไดรเวอร์การพัฒนา |
|---|---|---|
| apc (u) | คาสซานดรา | devnull |
| คุกกี้ | เบสเบส | devfalse |
| ไฟล์ | Couchdb | นักวิชาการ |
| ระดับ LEVELDB | MongoDB | เป็นมัด |
| memcache (d) | Predis | |
| sqlite | Redis | |
| ยาจับ | เครื่องปั่นป่วน | |
| xcache | SSDB | |
| Zend Disk Cache | แคชหน่วยความจำ zend |
ในการจัดเก็บแคชในโหมดไบนารี (เร็วที่สุด), PHP ต้องการส่วนขยาย Igbinary (https://github.com/igbinary/igbinary) หากไม่มี Igbinary เฟรมเวิร์กทำงานได้ดี แต่ค่าแคชจะถูกเก็บไว้โดยใช้ฟังก์ชัน PHP แบบอนุกรม
คุณสามารถกำหนดค่าให้ใช้แคชอัตโนมัติในฐานข้อมูล SQL ด้วยการกำหนดค่าค่าคงที่ SQL_CACHE (ดูในส่วนการกำหนดค่า) นอกจากนี้คุณสามารถใช้สำหรับแคชด้วยตนเองที่ใช้ในคอนโทรลเลอร์หรือรุ่นที่มี $this->cache->set($key, $value) $this->cache->get($key) เพื่อตั้งค่าแคช
ใช้คลาสเอกสารพิเศษเพื่อจัดการข้อมูลได้อย่างง่ายดายเกี่ยวกับ HTML สุดท้ายของคุณ
หากต้องการเรียกคลาสเอกสารให้ใช้ $this->document ภายในคอนโทรลเลอร์
ในการเพิ่ม CSS: $this->document->addStyle($href, $rel = 'stylesheet', $media = 'screen', $minify = true) ;
ในการเพิ่ม JavaScript: $this->document->addScript($script, $sort = '0', $minify = true) ;
Facebook Metatag: $this->document->addFBMeta($property, $content = '') ;
เอกสารชื่อ HTML: $this->document->setTitle($title) ;
คำอธิบายหน้า: $this->document->setDescription($description) ;
<?php
class ControllerCommonHome extends Controller {
public function index () {
$ this -> document -> addStyle ( ' pipoca.css ' );
}
}เฟรมเวิร์กนี้มียูทิลิตี้จำนวนมากและยอมรับมากขึ้นในโฟลเดอร์ระบบที่มีรูปแบบการโหลดอัตโนมัติ
ดำเนินการคลาสคลาส () ในคอนโทรลเลอร์เดียว
$ cla = new Classes ();
var_dump ( $ cla -> classes ());ดำเนินการคลาสคลาส () คลาสและฟังก์ชั่นการโทร () ในคอนโทรลเลอร์เดียว
$ cla = new Classes ( ' HTML ' );
var_dump ( $ cla -> functions ());หมายเหตุ: พารามิเตอร์ HTML คือเอาต์พุตในสไตล์ HTML เป็นทางเลือก
ในเฟรมเวิร์กนี้รถตักเป็นวิธีง่ายๆในการรับทรัพยากรที่จะใช้ในรหัส PHP ของคุณ ใช้งานง่ายมากและต้องใช้ขั้นตอนไม่กี่ขั้นตอน
สำหรับตัวอย่างการโหลดโมเดลเป็นเพียง $this->load->model('folder/file'); และการใช้คือ $this->model_folder_file->object(); เช่นตัวอย่างนี้:
<?php
class ControllerSampleUse extends Controller {
public function index () {
$ this -> load -> model ( ' data/json ' );
$ this -> data [ ' totalData ' ] = $ this -> model_data_json -> total ();
$ this -> out ();
}
}คุณสามารถใช้รถตักไปที่:
หากคุณต้องการการเชื่อมต่อฐานข้อมูลเพิ่มเติมหรือการเข้าถึงไดรเวอร์/ฐานข้อมูลอื่น ๆ คุณสามารถใช้ $this->load->database($driver, $hostname, $username, $password, $database); วิธีการ (ดูเพิ่มเติมเกี่ยวกับฟังก์ชั่นฐานข้อมูลในส่วนฐานข้อมูลของเอกสารนี้)
ชื่อของฐานข้อมูลเป็นวัตถุที่ลงทะเบียนเพื่อเข้าถึงฟังก์ชั่นฐานข้อมูล โหลดนี้ง่ายและลงทะเบียนกับวัตถุต้นกำเนิด
<?php
class ModelDemoSample extends Model {
public function otherData () {
$ this -> load -> database ( ' mpdo ' , ' localhost ' , ' root ' , ' imtheking ' , ' nameDatabase ' );
$ sql = $ this -> db -> nameDatabase -> query ( " SELECT * FROM mundo " );
return $ sql -> rows ;
}
}เฟรมเวิร์กนี้ใช้ MVC ทั้งหมด (โมเดลมุมมองและคอนโทรลเลอร์) แบบจำลองเป็นเหมือนคอนโทรลเลอร์และใช้โครงสร้างเดียวกันกับโฟลเดอร์ที่แตกต่างกัน
ในการสร้างโมเดลให้ใส่ไดเรกทอรีและไฟล์ด้วยรหัส
<?php
class ModelFolderFile extends Model {
public function SayMyName () {
return " Heisenberg " ;
}
} ในการใช้โมเดลนี้ในคอนโทรลเลอร์คุณสามารถใช้ loader ได้
<?php
class ControllerFolderFile extends Controller {
public function index () {
$ this -> load -> model ( ' folder/file ' );
echo $ this -> model_folder_file -> SayMyName ();
// this output is "Heisenberg".
}
} ในบางกรณีเราจำเป็นต้องเพิ่ม __Construct หรือ __destruct ในชั้นเรียนเพื่อการปฏิบัติรหัสที่ดีขึ้น ในการเรียกสร้างโครงสร้างในคอนโทรลเลอร์และรุ่นให้ใช้ $registry Parent:
public function __construct ( $ registry )
{
parent :: __construct ( $ registry );
// YOUR CODE HERE AFTER THIS LINE!
} ในการใช้ระบบการร้องขอเวทย์มนตร์คุณเพียงแค่เรียกใช้วิธี $this->request สำหรับตัวอย่างเพื่อรับค่าโพสต์ให้ใช้ $this->request->post['field'] เพื่อรับค่าโพสต์ด้วยความปลอดภัย สำหรับตัวแปรที่กำหนดไว้ล่วงหน้า $ _server ให้ใช้ $this->request->server['VALUE'] และ $this->request->get[key] สำหรับค่า $ _get
สำหรับบริการ REST คุณสามารถใช้ $this->request->method การตรวจสอบว่าเป็นโพสต์, รับ, ใส่, ลบหรือวิธี HTTP อื่น ๆ คุณสามารถใช้ฟังก์ชั่นเสริมเพื่อกำหนดวิธี HTTP เช่น $this->request->isPUT() เพื่อส่งคืน จริง หรือ เท็จ สำหรับวิธีการใส่ นอกจากนี้วิธีการอื่นยังมีฟังก์ชั่นของคุณเช่น $this->request->isPOST() , $ $this->request->isHEAD() $this->request->isGET() , $this->request->isCONNECT() $this->request->isOPTIONS() , $this->request->isTRACE() $this->request->isPATCH() , $this->request->isDELETE() ทั้งหมดเทียบเท่ากับ "IS" ฟังก์ชั่นในการร้องขอเช่นตัวอย่างนี้: $this->request->is('PUT') ส่งคืนจริงหรือเท็จสำหรับวิธีการใส่ http
ข้อดีในการใช้คำขอนี้แทนตัวแปรที่กำหนดไว้ล่วงหน้าของ PHP นั้นยิ่งมีความปลอดภัยมากขึ้นค่าที่สามารถอัพเกรดได้และค่า Unicode
เซสชันเป็นวิธีที่แตกต่างกันเล็กน้อยคุณสามารถกำหนดและใช้กับ $this->session->data['name'] เซสชันทั้งหมดที่เรียกว่าด้วย phacil มีความปลอดภัยสำหรับ HTTPS และ IP Verify กล่าวอีกนัยหนึ่งเราทำให้คุกกี้เซสชันถูกขโมยไปยากขึ้น คุณสามารถกำหนดชื่อคำนำหน้าเซสชันด้วยค่าคงที่ SESSION_PREFIX ในไฟล์กำหนดค่าของคุณ สำหรับค่าเริ่มต้นคำนำหน้าคือ "sess"
| พารามิเตอร์ | พิมพ์ | คำอธิบาย |
|---|---|---|
$this->template | สาย | ระบุเส้นทางไปยังเทมเพลตด้วยตนเอง |
$this->twig | อาร์เรย์ | สร้างฟังก์ชั่นเพิ่มเติมของ Twig เช่น: $this->twig = array('base64' => function($str) { return base64_encode($str); }); |
$this->children | อาร์เรย์ | โหลดในตัวแปรเทมเพลตการแสดงผลอื่น ๆ ของเว็บแอป ส่วนท้าย และ ส่วนหัว ของเด็ก ๆ จะถูกโหลดเริ่มต้นเมื่อใช้งาน $this->out() เอาต์พุต หากต้องการโหลดโดยไม่มีค่าเริ่มต้นนี้ให้ใช้ $this->out(false) |
$this->redirect($url) | สาย | สร้างส่วนหัวเพื่อเปลี่ยนเส้นทางไปยังหน้าอื่น |
เฟรมเวิร์ก Exacti Phacil เป็นฐานเราเตอร์ที่เรียบง่ายเพื่อสร้างการนำทางเว็บที่เรียบง่ายและสอดคล้องกัน
หากไม่มี URL SEO เราเรียกใช้หน้าด้วย เส้นทาง รับพารามิเตอร์เมื่อมีโฟลเดอร์โครงการ/ไฟล์ของคอนโทรลเลอร์เช่นนี้: http://example.com/index.php?route=folder/file
ในกรณีตัวอย่างเรามีคอนโทรลเลอร์นี้:
<?php
class ControllerFolderFile extends Controller {
public function index () {
echo " Index " ;
}
public function another () {
echo $ this -> foo ( $ this -> request -> get [ ' p ' ]);
}
private function foo ( $ parameter ) {
return ( $ parameter != 0 ) ? " another " : " other " ;
}
}หากเราเข้าถึง index.php? route = โฟลเดอร์/ไฟล์ เราจะเห็นข้อความ "ดัชนี" แต่เช่นเดียวกับต้นไม้ถ้าเราเข้าถึง index.php? route = โฟลเดอร์/ไฟล์/อื่น จะได้รับรหัสฟังก์ชั่นอื่นด้วยข้อความ "อื่น ๆ "
พารามิเตอร์ Get หลายตัวนั้นง่ายและเราสามารถกำหนดได้ตามปกติเช่น: index.php? route = โฟลเดอร์/ไฟล์/อื่น & p = 2 เพื่อพิมพ์ข้อความ "อื่น"
ฟังก์ชั่นส่วนตัวและการป้องกันมีไว้สำหรับการใช้งานภายในเท่านั้นหากเราพยายามเข้าถึง index.php? route = โฟลเดอร์/ไฟล์/foo เฟรมเวิร์กส่งคืนข้อผิดพลาด 404 http
หากคุณต้องการ URL ที่สวยงามสำหรับ SEO หรือการเพิ่มประสิทธิภาพอื่น ๆ คุณสามารถใช้ตารางฐานข้อมูล URL_ALIAS ง่ายมากและ "แปล" เส้นทางใน URL
เรียกใช้ SQL นี้ในฐานข้อมูลของคุณเพื่อสร้างตาราง URL_ALIAS:
CREATE TABLE ` url_alias ` (
` url_alias_id ` int ( 11 ) NOT NULL AUTO_INCREMENT,
` query ` varchar ( 255 ) COLLATE utf8_bin NOT NULL ,
` get ` longtext COLLATE utf8_bin,
` keyword ` varchar ( 255 ) COLLATE utf8_bin NOT NULL ,
PRIMARY KEY ( ` url_alias_id ` ),
UNIQUE KEY ` keyword ` ( ` keyword ` )
) AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8 COLLATE = utf8_bin;ลองนึกภาพตาราง SQL นี้เรียกว่า url_alias:
| url_alias_id | สอบถาม | รับ | คำสำคัญ |
|---|---|---|---|
| 1 | ติดต่อ/contato | ติดต่อ | |
| 2 | เว็บเซิร์ฟเวอร์/ไซต์ | แผนผังไซต์ |
ด้วย url_alias การเข้าถึงเส้นทาง http://example.com/index.php?route=contact/contato และ http://example.com/contact เหมือนกัน! (และสวยมาก!)
คุณสามารถสร้าง URL ได้โดยไม่ต้องกำหนดค่าฐานข้อมูล SQL สำหรับสิ่งนี้คุณเพียงแค่ระบุเส้นทางในไฟล์กำหนดค่าโดยใช้ เส้นทาง คงที่ด้วยเนื้อหาอาร์เรย์เช่นนี้:
define ( ' ROUTES ' , array (
' magic ' => ' common/home/xml ' ,
' json ' => ' common/home/json ' )); เรามีฟังก์ชั่นในการสร้างลิงก์ที่เข้มงวดและไดนามิกอัตโนมัติ: $this->url->link($route, $args = '', $connection = 'NONSSL') เป็นฟังก์ชั่นง่ายๆในการสร้างลิงก์ภายในด้วยการเข้ารหัส URL ที่ถูกต้อง
ในตัวอย่างของตารางนี้ด้านบนหากเรามีรหัสนี้:
echo $ this -> url -> link ( ' contact/contato ' );เราได้รับ URL นี้ในผลลัพธ์: http://example.com/contact
แต่ถ้าคุณไม่มีเส้นทางในตาราง url_alias ให้ส่งคืนเส้นทางที่สมบูรณ์
echo $ this -> url -> link ( ' catalog/products ' );ส่งคืน URL นี้ในผลลัพธ์: http://example.com/index.php?route=catalog/products
ด้วยพารามิเตอร์รับเพิ่มเติม:
$ fields = array ( ' foo ' => ' bar ' );
echo $ this -> url -> link ( ' contact/contato ' , $ fields );
echo $ this -> url -> link ( ' contact/contato/place ' , $ fields );เราได้รับ URL นี้ในเอาต์พุตด้วยพารามิเตอร์ GET:
http://example.com/contact?foo=bar
http://example.com/index.php?route=contact/contato/place&foo=bar
หมายเหตุ: จำเป็นต้องระบุ config_seo_url สำหรับฟังก์ชั่นที่ถูกต้องของ URL นี้ หากคุณใช้ตาราง SQL URL_ALIAS คุณต้องระบุ USE_DB_CONFIG เป็นจริงในไฟล์ config
ใช้อักขระ ' % ' และรูปแบบของมัน (ดูด้านล่าง) เพื่อสร้างเส้นทางด้วย Wildcard เนื้อหาทั้งหมดใน URL จะตรงกับ Wildcard จะถูกส่งผ่านไปยังฟังก์ชั่นคอนโทรลเลอร์ของคุณเป็นอาร์กิวเมนต์
| ไพ่ | คำอธิบาย |
|---|---|
| %D | ตรงกับเลขทศนิยมใด ๆ เทียบเท่ากับ [0-9] |
| %W | ตรงกับจดหมายใด ๆ ตัวเลขหรือขีดเส้นใต้ เทียบเท่ากับ [A-ZA-Z0-9_] ไม่อนุญาตให้ใช้ช่องว่างหรือตัวละครอื่น ๆ |
| %A | ตรงกับอักขระใด ๆ ในช่วง ASCII ที่ถูกต้อง ไม่ยอมรับอักขระละตินเช่น 'ç' หรือ 'ã' |
| - | ยอมรับตัวละครใด ๆ |
define ( " ROUTES " , [
" produto/%d/%/promo " => " feriado/natal/presentes "
]
); <?php
class ControllerFeriadoNatal extends Controller {
public function presentes ( $ id , $ name ) {
echo $ id ;
echo $ name ;
}
} ในตัวอย่างข้างต้นลองนึกภาพ URL http://yoursite.com/produto/**87**/**Alfajor**/promo URL นี้กำลังส่งไปยังฟังก์ชั่น แสดง ค่าสำหรับ $id $id $name $name 87 ใน alfajor การต่อเนื่อง WildCard %D ในเราเตอร์ที่สัมพันธ์กับอาร์กิวเมนต์ $id กำหนดเป็นค่าตัวเลขที่ยอมรับได้เท่านั้น
ในช่วงเวลานี้ทรัพยากรนี้มีเฉพาะในวิธีการเส้นทางคงที่ เส้นทาง SQL ไม่รองรับ Wildcard ในขณะนี้
หากคุณต้องการส่งออกในรูปแบบอื่นหรือการตอบกลับอื่นคุณสามารถใช้วิธีการตอบกลับ $this->response
สำหรับตัวอย่างเพื่อสร้างคอนโทรลเลอร์เมื่อเอาต์พุตเป็นข้อมูล JSON:
<?php
class ControllerApiData extends Controller {
public function index () {
$ record = array ( array ( " index " => 482 , " id " => 221 ), array ( " index " => 566 , " id " => 328 ));
$ json = json_encode ( $ record );
$ this -> response -> isJSON (); //Auto send the 'Content-Type: application/json' header
$ this -> response -> setOutput ( $ json );
}
} $this->response->isJSON รับผิดชอบในการส่งส่วนหัว HTTP ประเภท JSON เนื้อหาไปยังเบราว์เซอร์ $this->response->setOutput() ทำงานสำหรับการส่งเอาต์พุตของเนื้อหาของตัวแปรฟังก์ชันคงที่ ฯลฯ ไปยังเบราว์เซอร์
เรามีผลลัพธ์นี้:
[{ "index" : 482 , "id" : 221 },{ "index" : 566 , "id" : 328 }]ตัวอย่างอื่น แต่มีข้อมูล XML:
<?php
class ControllerApiData extends Controller {
public function xml () {
$ test_array = array (
' bla ' => ' blub ' ,
' foo ' => ' bar ' ,
);
$ xml = new SimpleXMLElement ( ' <root/> ' );
array_walk_recursive ( $ test_array , array ( $ xml , ' addChild ' ));
$ this -> response -> addHeader ( ' Content-Type: text/xml ' );
$ this -> response -> setOutput ( $ xml -> asXML () );
}
} $this->response->addHeader มีฟังก์ชั่นในการส่งส่วนหัว HTTP ส่วนบุคคลไปยังเบราว์เซอร์ในกรณีนี้ระบุข้อมูล ประเภทเนื้อหา คำตอบคือ:
<? xml version = " 1.0 " ?>
< root >
< blub >bla</ blub >
< bar >foo</ bar >
</ root > ในการตอบสนองเรามีฟังก์ชั่น setOutput ที่มีพารามิเตอร์ไปยังสิ่งอำนวยความสะดวกสำหรับการใช้งาน JSON และ REST
พารามิเตอร์คือ $this->response->setOutput($output, bool $isJSON, int $HTTPCODE, string $HTTPDESC); ในการใช้ส่วนหัวประเภทเนื้อหา JSON โดยอัตโนมัติหากพารามิเตอร์ที่สองเป็นจริงและกำหนดรหัสการตอบกลับ HTTP ในพารามิเตอร์ที่สาม คำอธิบายสำหรับรหัส HTTP สามารถส่งได้หากคุณต้องการ
ยกเว้นพารามิเตอร์แรกอื่น ๆ เป็นตัวเลือก
<?php
class ControllerApiData extends Controller {
public function index () {
$ record = [
[
" index " => 482 ,
" id " => 221
],
[
" index " => 566 ,
" id " => 328
]
];
$ json = json_encode ( $ record );
$ this -> response -> setOutput ( $ json , true , 404 );
}
} ไลบรารี config ในเฟรมเวิร์ก Phacil ได้รับค่าที่จะใช้ในเว็บแอพทั้งหมดของ: $config array ในไฟล์ config.php ตารางการตั้งค่าในฐานข้อมูลที่กำหนดค่าของคุณหรือทั้งสองอย่าง
อยู่ในโหมดคีย์-> ค่าที่มีตัวเลือกเช่นค่าอนุกรม
หากต้องการใช้ค่าการกำหนดค่าเพียงโทร $this->config->get('nameOfKey')
ในการจัดเก็บค่ากำหนดค่าให้ใช้ตาราง SQL ที่เรียกว่าการตั้งค่าหรืออาร์เรย์
$ config = array (
" title " => " ExacTI Phacil Framework " ,
" config_error_display " => true ,
" config_error_log " => false ,
" phones " => array (
" BR " => ' +55 11 4115-5161 ' ,
" USA " => ' +1 (845) 579-0362 ' )
);| การตั้งค่า _ID | กลุ่ม | สำคัญ | ค่า | เป็นลำดับ |
|---|---|---|---|---|
| 1 | ชื่อ | เฟรมเวิร์ก Exacti Phacil | 0 | |
| 2 | การกำหนดค่า | config_error_display | 1 | 0 |
| 3 | การกำหนดค่า | config_error_log | 0 | 0 |
| 4 | โทรศัพท์ | A: 2: {S: 2: "Br"; S: 16: "+55 11 4115-5161"; S: 3: "USA"; S: 17: "+1 (845) 579-0362";} | 1 |
ปุ่มกำหนดค่านี้สงวนไว้เพื่อใช้สำหรับเฟรมเวิร์ก
$this->document->setTitle() แทนที่ %s เป็นค่านี้ (สตริง) CREATE TABLE ` settings ` (
` setting_id ` int ( 11 ) NOT NULL AUTO_INCREMENT,
` group ` varchar ( 32 ) COLLATE utf8_bin,
` key ` varchar ( 64 ) COLLATE utf8_bin NOT NULL DEFAULT ' ' ,
` value ` mediumtext COLLATE utf8_bin,
` serialized ` tinyint ( 1 ) NOT NULL DEFAULT ' 0 ' ,
PRIMARY KEY ( ` setting_id ` )
) AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8 COLLATE = utf8_bin; CREATE TABLE settings (
[setting_id] int NOT NULL IDENTITY PRIMARY KEY ,
[group] varchar ( 32 ),
[key] varchar ( 64 ) NOT NULL DEFAULT ' ' ,
[value] nvarchar(max),
[serialized] tinyint DEFAULT ' 0 ' ,
UNIQUE ([key])
); หากคุณต้องการลงทะเบียนคลาสหรือทรัพยากรอื่น ๆ ที่จะใช้ในแอปพลิเคชันทั้งหมดของคุณคุณสามารถสร้างโดยใช้ไฟล์ ลงทะเบียน. php ในโฟลเดอร์ ระบบ ใช้เพื่อระบุ $this->registry->set('name', $function); ด้วยฟังก์ชั่นคลาสหรือวิธีการหากคุณต้องการ หลังจากนี้เพียงแค่ใช้ $this->name เพื่อเข้าถึงรีจิสทรีนี้ภายในคอนโทรลเลอร์หรือรุ่น
ประกาศใน /system/registrations.php
<?php
// use for register aditionals
$ criptoClass = new CriptoClass ( ' salt ' );
$ this -> registry -> set ( ' cripto ' , $ criptoClass );ใช้ in /controler/demo/sample.php
<?php
class ControllerDemoSample extends Controller {
public function index () {
$ value = 123 ;
$ use = $ this -> cripto -> function ( $ value );
echo $ use ;
}
}คุณสามารถทำให้การลงทะเบียนมีความซับซ้อนมากขึ้นเช่นกันสำหรับตัวอย่างใช้ฐานข้อมูลอื่นหรือการโทรโหลด
ประกาศใน /system/registrations.php
<?php
//use for register aditionals
class DBne extends Controller {
public function __construct ( $ registry ) {
parent :: __construct ( $ registry );
$ database = " test " ;
$ this -> load -> database ( $ driver , $ hostname , $ username , $ password , $ database );
//see the load database method above for better comprehension
}
}
new DBne ( $ this -> registry );ใช้ใน/controller/demo/sample.php
class ControllerDemoSample extends Controller {
public function index () {
$ this -> test -> query ( " SELECT * FROM mundo " );
}
}ให้ความสนใจ: ใช้การลงทะเบียนเฉพาะสำหรับวัตถุที่คุณต้องการในการเข้าถึงจากแอปพลิเคชันทั้งหมด เช่น: หากคุณต้องการเชื่อมต่อฐานข้อมูลอีกหนึ่งฐาน แต่คุณใช้สำหรับรุ่นเดียวมันจะดีกว่าที่จะโหลดภายในรุ่นเพื่อประสิทธิภาพที่ยอดเยี่ยม
ในการเพิ่มคลาสหรือฟังก์ชั่นใหม่คุณสามารถใส่โฟลเดอร์ในไดเรกทอรีระบบด้วยไฟล์ autoload.php ไฟล์ autoload.php ทั้งหมดจะรวมอยู่ในเฟรมเวิร์กโดยอัตโนมัติ
Composer เป็นตัวจัดการแพ็คเกจแอปพลิเคชันระดับสำหรับภาษาการเขียนโปรแกรม PHP ที่ให้รูปแบบมาตรฐานสำหรับการจัดการการพึ่งพาซอฟต์แวร์ PHP และไลบรารีที่จำเป็น
หากต้องการใช้แพ็คเกจนักแต่งเพลงและ Autoloads เพียงกำหนดค่า composer.json ของคุณด้วยผู้ขาย DIR: ระบบ/ผู้ขาย
{
"config" : {
"vendor-dir" : " ./system/vendor/ "
}
}โครงการนี้ได้รับการบำรุงรักษาสำหรับโซลูชั่นไอทีที่แน่นอนด้วยใบอนุญาต GPLV3