للمشاريع الصغيرة والبسيطة ، تتكون من:
يستخدم Sekeleton MVC بنية MVC كما يوحي الاسم. MVC تعني التحكم في عرض النموذج. موديل-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 التحميل التلقائي (الملحن) والمساعدين العالميين (المزيد حول هذا لاحقًا).index.php sendResponse () يتم استدعاء مثيل تطبيق $ الذي يرسل الرؤوس المناسبة ورمز الحالة إلى جانب المحتوى الذي يتم إرساله إلى المتصفح.أنت الآن تفهم كيف تعامل Framework مع هذا كل شيء. فيما يلي وثائق لكل فصل وبعض الأمثلة لتبدأ في التطوير.
YourAppApp : الرمز الخاص بكControllers : جميع وحدات التحكمModel : جميع النماذجView : كل المشاهداتConfig.php : فئة تكوين المستخدمCore : رمز الإطارpublic : معرض للويبindex.php : نقطة انطلاق التطبيق.htaccess : إعادة توجيه جميع طلبات إلى index.phpassets : جميع الأصول الثابتة مثل CSS/JS تعيش هناstorage : طرق العرض المترجمة ، المستندات التي تم تحميلها ، إلخ.vendor : تنزيل الملحن للمكتبات المطلوبة Altough معظم Framework يتبع المشاركة على التكوين تكوين مستخدم مطلوب لمعاملات DB وعرض المسار ، إلخ.
يعيش تكوين المستخدم داخل دليل التطبيق الخاص بك في فئة التكوين. فتح هذا الملف سترى فئة التكوين يمتد BaseConfig ( core config) الذي يتم تعريفه داخليًا في الهيكل العظمي. الأهم من ذلك كله هو const parmas قد يكون بعض الطرق الثابتة.
تم توثيق هذه الفئة من خلال التعليقات ، لذا تحقق من ذلك وستتمكن من اكتشاف كل التكوين بنفسك.
يتم استخدام اتفاقيات التوجيه على تكوينات لـ EX :.
تخيل تريد إظهار منشور مسار 3 هوية سيبدو شيئًا كهذا
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 " ],
]);الرسائل التي تم إنشاؤها بواسطة Framework بسيطة ويمكنك تخصيص ملفات التكوين داخل. السابق.
public static function getMessage ( $ rule , $ field , $ params , $ messages = [])
{
$ messages = [
" required " => " Hmm... plz get the $ field filled :) "
];
return parent :: getMessage ( $ rule , $ field , $ params , $ messages );
}في المثال أعلاه ، ستكون الرسالة المطلوبة مخصصة.
يفشل إذا ترك الحقل فارغًا وفقًا للوظيفة الفارغة ().
يجب أن تكون قيمة سلسلة.
يجب أن تكون قيمة السلسلة الرقمية أو الرقمية بحجم معين ، إذا لم يتم إعطاء الحجم ببساطة تحقق من القيمة الرقمية
صحيح لنعم ، لا ، نعم ، لا ، صحيح ، خطأ ، 0 ، 1 كاذب خلاف ذلك
يجب أن تحتوي بيانات الطلب على حقل بنفس الاسم مع _confirlation لاحقة. على سبيل المثال: إذا تم استخدامه في كلمة المرور ، فسيتحقق من حقل Password_Confirmation
سواء كان معرف بريد إلكتروني صالح أم لا.
تحقق مما إذا كان ملفًا محملاً صالحًا أم لا
تحقق مما إذا كانت صورة صالحة أم لا. الأنواع المسموح بها افتراضيًا: Image/JPEG ، Image/GIF ، Image/PNG ، Image/WebP ، Image/SVG+XML ، Image/BMP.
سواء كان تاريخًا صالحًا أم لا يتم تمريره من خلال وظيفة StrTotime ()
تحقق مما إذا كان كلا التاريخ متساويين أم لا
تحقق مما إذا كان تاريخ المستخدم يأتي بعد واحد معين.
تحقق مما إذا كان تاريخ المستخدم يأتي قبل واحد.
الحقل تحت التحقق من الصحة ومعطى واحد يجب أن يكون لها قيم مختلفة.
الحقل تحت التحقق من الصحة ومعطى واحد يجب أن يكون له نفس القيم.
يجب أن يكون الحقل الخاضع للتحقق موجودًا أو فارغًا.
الحد الأقصى لحجم قاعدة. ل
الرقم : يجب أن يكون الرقم أقل من أو يساوي الحجم.
السلسلة : يجب أن يكون الطول أقل من أو يساوي الحجم.
صفيف : يجب أن يكون عدد العناصر أقل من أو يساوي الحجم.
الملف الذي تم تحميله : يجب أن تكون الملفات أقل من أو تساوي الحجم.
الحد الأدنى لقاعدة الحجم. القيد نفسه مثل Max: Size Rule.
قم بتعيين بيانات اعتماد قاعدة البيانات الخاصة بك ونوع DB في ملف التكوين. ثم يمكنك دائمًا الحصول على الاتصال بالاتصال:
$ conn = Core Database:: getConnection (); // PDO instance النموذج هو المكان الذي سيقيم فيه عملك ، والذي يتضمن المنطق المتعلق بـ DB أيضًا. لهذا السبب يتم توفير عدد قليل من الأساليب المفيدة:
// 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 Pitty Form لاسم فئة لك. لذلك في الحالة المذكورة أعلاه لفئة المستخدم ، سيكون المستخدمون نفس الطريقة التي سيكون بها AppData app_data وسيكون المعرض معارض. يمكنك تحديد اسمك الخاص عن طريق تجاوز خاصية $table ، وتعتبر $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 ]);
}
} أيضًا للحصول على معرف الإدراج الأخير ، يمكنك القيام Database::getConnection()->lastInsertId() .