สำหรับโครงการขนาดเล็กและเรียบง่ายประกอบด้วย:
Sekeleton MVC ใช้สถาปัตยกรรม MVC เป็นชื่อแนะนำ MVC ย่อมาจาก Model-View-Controller Model-View-Controller-Wikipedia
Model:
The central component of the pattern. It is the application's dynamic data structure, independent of the user interface. It directly manages the data, logic and rules of the application.
View:
Any representation of information such as a chart, diagram or table. Multiple views of the same information are possible, such as a bar chart for management and a tabular view for accountants.
Controller:
Accepts input and converts it to commands for the model or view.
example.com/shop/show-shoes/index.phpindex.php ต้องการ autoload (นักแต่งเพลง) และผู้ช่วยทั่วโลก (เพิ่มเติมเกี่ยวกับสิ่งนี้ในภายหลัง)index.php sendresponse () ถูกเรียกใช้อินสแตนซ์ $ แอพซึ่งส่งส่วนหัวและรหัสสถานะที่เหมาะสมพร้อมกับเนื้อหาที่ส่งกลับไปยังเบราว์เซอร์ตอนนี้คุณเข้าใจว่าเฟรมเวิร์กจัดการกับทั้งหมดนี้ได้อย่างไร ด้านล่างเป็นเอกสารสำหรับแต่ละชั้นเรียนและตัวอย่างบางส่วนเพื่อให้คุณเริ่มต้นการพัฒนา
YourAppApp : รหัสของคุณControllers : ตัวควบคุมทั้งหมดModel : ทุกรุ่นView : มุมมองทั้งหมดConfig.php : คลาส config ผู้ใช้Core : รหัสของเฟรมเวิร์กpublic : สัมผัสกับเว็บindex.php : จุดเริ่มต้นของแอป.htaccess : เปลี่ยนเส้นทางการร้องขอทั้งหมดไปยัง index.phpassets : สินทรัพย์คงที่ทั้งหมดเช่น CSS/JS อาศัยอยู่ที่นี่storage : มุมมองที่รวบรวม, เอกสารที่อัปโหลด ฯลฯvendor : การดาวน์โหลดห้องสมุดที่จำเป็นของนักแต่งเพลง Altough เฟรมเวิร์กส่วนใหญ่ติดตามการประชุมเกี่ยวกับการกำหนดค่าการกำหนดค่าผู้ใช้เป็นสิ่งจำเป็นสำหรับพารามิเตอร์ db และเส้นทางดู ฯลฯ
การกำหนดค่าผู้ใช้มีอายุการใช้งานภายในไดเรกทอรีแอปของคุณในคลาสการกำหนดค่า การเปิดไฟล์นี้คุณจะเห็นคลาส config ขยาย baseconfig ( core config) ซึ่งกำหนดไว้ภายในในโครงกระดูก การกำหนดค่าทั้งหมดส่วนใหญ่เป็น parmas const บางอย่างอาจเป็นวิธีการคงที่
คลาสนี้ได้รับการบันทึกผ่านความคิดเห็นดังนั้นตรวจสอบแล้วคุณจะสามารถหาการกำหนดค่าทั้งหมดด้วยตัวเอง
สำหรับการประชุมการกำหนดเส้นทางจะใช้มากกว่าการกำหนดค่าสำหรับ Ex:
ลองนึกภาพต้องการแสดงโพสต์ของเส้นทาง 3 ID จะมีลักษณะเช่นนี้
example.com/user-post/show-photos/3/paris
ตัวอย่างด้านบนมี
ดังนั้นคลาสคอนโทรลเลอร์ด้านบนจะมีลักษณะ
<?php
namespace App Controllers ;
use Core Request ;
class UserPost {
public function showPhotos ( Request $ request , $ id , $ location ) {
# $id= 3 and $location= paris
return view ( ' photos.show ' , [
' id ' => $ id ,
' location ' => ' paris '
]);
}
}แต่คุณอาจถามว่า /เกี่ยวกับ /เกี่ยวกับ ฯลฯ เส้นทาง?
เส้นทางเหล่านี้จะถูกกำหนดเส้นทางโดยอัตโนมัติไปยัง default_controller (สามารถเปลี่ยนแปลงได้ในการกำหนดค่า) ค่าเริ่มต้นคือ SiteController และ / การกระทำเป็นค่าเริ่มต้นเป็นวิธีการดัชนีซึ่งสามารถเปลี่ยนแปลงได้ในการกำหนดค่าด้วย
นอกจากนี้คุณยังสามารถสังเกตเห็นวัตถุ CoreRequest ที่ถูกส่งผ่านเป็นอาร์กิวเมนต์แรกได้เสมอ มันมีผู้ช่วยที่หลากหลายสำหรับการร้องขอ (ข้อมูลเพิ่มเติมในส่วนคำขอ)
คำขอถือเป็นวัตถุ มันจะผ่านไปโดย Deafault ไปยังทุกวิธีของคอนโทรลเลอร์เป็นอาร์กิวเมนต์แรกและพารามิเตอร์อื่น ๆ จะถูกส่งผ่านในลำดับ อดีต:
สำหรับ url example.com/user-post/show-photos/3/paris
<?php
namespace App Controllers ;
use Core Request ;
class UserPost {
public function showPhotos ( Request $ request , $ id , $ location ) {
# $id= 3 and $location= paris
return view ( ' photos.show ' , [
' id ' => $ id ,
' location ' => ' paris '
]);
}
}นี่คือวิธีการที่มีประโยชน์บางอย่างที่จัดทำโดยคำขอวัตถุให้คุณ
/* Check Method of request */
$ request -> isGet ();
$ request -> isPost ();
/*
How to get superglobals
These methods if provided returns specific field or entire array if no parameters are passed.
If field does not exits null is returned
*/
$ request -> query ( ' field ' ); // For GET
$ request -> input ( ' field ' ); // For POST
$ request -> server ( ' field ' ); // For SERVER
$ request -> files ( ' field ' ); // For FILES
$ request -> all (); // For FILES and POST merged การตอบสนองที่ต้องส่งไปยังเบราว์เซอร์สามารถทำได้โดย
view ( ' viewpath ' , $ data = []); // viewpath ex. phtots.show for Views/photos/show.php
view ([ ' header ' , ' content1 ' , ' content2 ' , ' footer ' ], $ data = []); // array alternative
json ( $ data = [], $ options , $ depth = 512 ); // Same as setting header("Contetnt-Type: text/json"); and using json_encode() การตรวจสอบความถูกต้องได้รับแรงบันดาลใจจาก Laravel และมีกฎพื้นฐานและมีกฎที่ใช้มากที่สุด
$ errorMsgs = Core Validator:: validate ( $ request -> all (), [
" name " => [ " required " , " max:30 " ],
" mobile " => [ " required " , " digits:10 " ],
" photo " => [ " required " , " image:image/jpeg " , " max:100 " ],
]);ข้อความที่สร้างโดยเฟรมเวิร์กนั้นง่ายและคุณสามารถปรับแต่งไฟล์ภายในไฟล์ อดีต.
public static function getMessage ( $ rule , $ field , $ params , $ messages = [])
{
$ messages = [
" required " => " Hmm... plz get the $ field filled :) "
];
return parent :: getMessage ( $ rule , $ field , $ params , $ messages );
}ในตัวอย่างข้างต้นข้อความที่ต้องการจะกำหนดเอง
ล้มเหลวหากฟิลด์ว่างเปล่าตามฟังก์ชั่นที่ว่างเปล่า () ของ PHP
ต้องเป็นค่าสตริง
ต้องเป็นค่าสตริงตัวเลขหรือตัวเลขที่มีขนาดที่กำหนดหากขนาดไม่ได้รับเพียงตรวจสอบเป็นค่าตัวเลข
จริงสำหรับใช่, ไม่ใช่, ใช่, ไม่, จริง, เท็จ, 0, 1 เป็นอย่างอื่นเท็จ
ข้อมูลการร้องขอจะต้องมีฟิลด์ที่มีชื่อเดียวกันกับคำต่อท้าย _confirmation ตัวอย่าง: หากใช้กับรหัสผ่านมันจะตรวจสอบฟิลด์ password_confirmation
ไม่ว่าจะเป็นรหัสอีเมลที่ถูกต้องหรือไม่
ตรวจสอบว่าเป็นไฟล์ที่อัปโหลดที่ถูกต้องหรือไม่
ตรวจสอบว่าเป็นภาพที่ถูกต้องหรือไม่ ประเภทที่อนุญาตโดยค่าเริ่มต้น: image/jpeg, image/gif, image/png, image/webp, image/svg+xml, image/bmp
ไม่ว่าจะเป็นวันที่ที่ถูกต้องผ่านฟังก์ชั่น strtotime ()
ตรวจสอบว่าวันที่ทั้งคู่มีค่าเท่ากันหรือไม่
ตรวจสอบว่าวันที่ผู้ใช้มาหลังจากวันที่กำหนดหรือไม่
ตรวจสอบว่าวันที่ผู้ใช้มาก่อนวันที่กำหนดหรือไม่
ฟิลด์ภายใต้การตรวจสอบและให้หนึ่งต้องมีค่าที่แตกต่างกัน
ฟิลด์ภายใต้การตรวจสอบและให้หนึ่งต้องมีค่าเดียวกัน
ฟิลด์ภายใต้การตรวจสอบจะต้องมีอยู่อาจเป็นโมฆะหรือว่างเปล่า
กฎขนาดสูงสุด สำหรับ
หมายเลข : จำนวนต้องน้อยกว่าหรือเท่ากับขนาด
สตริง : ความยาวต้องน้อยกว่าหรือเท่ากับขนาด
อาร์เรย์ : การนับองค์ประกอบต้องน้อยกว่าหรือเท่ากับขนาด
ไฟล์ที่อัปโหลด : Filesize ต้องน้อยกว่าหรือเท่ากับขนาด
กฎขนาดต่ำสุด ข้อ จำกัด เหมือนกับกฎ Max: Size Rule
ตั้งค่าข้อมูลรับรองฐานข้อมูลและประเภท db ในไฟล์กำหนดค่า จากนั้นคุณสามารถรับการเชื่อมต่อได้ตลอดเวลา:
$ conn = Core Database:: getConnection (); // PDO instance รูปแบบเป็นที่ที่ธุรกิจของคุณจะอยู่ซึ่งรวมถึงตรรกะที่เกี่ยวข้องกับฐานข้อมูลด้วย นั่นเป็นเหตุผลที่มีวิธีการที่มีประโยชน์น้อยมาก:
// suppose
class User extends Model { /* Empty */ }
$ user = new App Models User ();
$ user -> find ( $ id , columns = [ ' * ' ], $ fetchStyle = PDO :: FETCH_BOTH ); // Get single row
$ user -> all (columns = [ ' * ' ], $ fetchStyle = PDO :: FETCH_BOTH ); // get all rows
$ user -> insert ( $ data ); // As associative array of column name and values
$ user -> update ( $ id , $ data ); // $id to be updated with $data
$ user -> delete ( $ id ); // Row to delete with $id โมเดลจะอนุมานชื่อของตารางเป็นรูปแบบพหูพจน์ของ Snake_case ของชื่อคลาสของคุณ ดังนั้นในกรณีข้างต้นสำหรับคลาสผู้ใช้จะเป็นผู้ใช้แบบเดียวกันกับที่ AppData จะเป็น App_data และแกลเลอรี่จะเป็นแกลเลอรี่ คุณสามารถกำหนดชื่อของคุณเองได้โดยการเอาชนะ $table Property ซึ่งเป็นวิธีเดียวกันกับที่ $id ถือว่าเป็นคีย์หลักเริ่มต้นและสามารถแทนที่ได้เช่นกัน
class User extends Model
{
protected $ table = " my_table " ;
protected $ id = " tbl_id " ;
}อะไรที่ซับซ้อนกว่านี้คุณจะต้องสอบถามด้วยตัวเอง อดีต:
use Core Model ;
use Core Database ;
class User extends Model
{
public function deleteByName ( $ name )
{
$ sql = " DELETE FROM $ this -> table WHERE name=? " ;
return Database:: getConnection ()
-> prepare ( $ sql )
-> execute ([ $ name ]);
}
} นอกจากนี้เพื่อรับ ID ID ล่าสุดคุณสามารถทำ Database::getConnection()->lastInsertId()