خفيفة الوزن وسهلة الاستخدام PHP Framework لبناء مواقع الويب وتطبيقات الويب.
تعيد الهندسة المعمارية لـ Sippy تشابهًا مع Codeigniter ، لذلك نسميها إطارًا خفيف الوزن PHP. ومع ذلك ، تذكر أنه نظرًا لأن Sippy خفيف الوزن ، فإنه لا يشمل الكثير من الوظائف التي تأتي مع CodeIgniter. ربما يمكننا إضافة وظائف "Plug-N-Play" عبر المكونات الإضافية ووحدات التحكم والمكتبات. لاستخدام إزالة "العينة" من ملف التكوين في التطبيق/config/sample.config.php بحيث يكون التطبيق/config/config.php وملء بيانات التكوين الخاصة بك.
يعتمد SIPPY على نمط تطوير النموذج-View-Controller.
تنطلق ملفات التطبيق الخاصة بك في مجلد "التطبيق" (لا تحتاج إلى لمس مجلد النظام). داخل مجلد التطبيق ، توجد مجلدات لجميع كيانات التطبيق المحددة:
Config Controllers مساعدون المساعدين سجلات النماذج الإضافات الإضافات
عندما يقوم Sippy بتحميل ملفات ، يفترض أنها في المجلدات المقابلة. لذا تأكد من وضع ملفاتك في المجلدات الصحيحة.
نحن نشجعك على استخدام مجلد "الأصول" في الجذر لتخزين ملفات الموارد الثابتة (CSS ، JS وما إلى ذلك) ولكن يمكنك وضعها في أي مكان. يمكنك أيضًا استخدام وظيفة site_url() للمساعدة في تضمين الملفات في html أو استخدام site_url('main/index') للانتقال إلى http://www.yoursite.com/main/index . على سبيل المثال:
< link rel =" stylesheet " href =" <?php echo site_url(); ?>assets/css/style.css " type =" text/css " media =" screen " />جميع الفصول في sippy تستخدم تسمية pascalcase. يجب أن تكون أسماء الملفات المرتبطة هي نفسها باستثناء كل الحالة السفلية. لذلك على سبيل المثال ، سيكون لدى الفئة الرئيسية اسم FileName MainClass.php. يجب تضمين السطح السفلي في الفصول في أسماء الملفات أيضًا.
بشكل افتراضي ، تم تصميم عناوين URL في SIPPY لتكون محرك البحث وصديقة للإنسان. بدلاً من استخدام نهج "سلسلة الاستعلام" القياسية لعناوين URL التي هي مرادف للأنظمة الديناميكية ، يستخدم Sippy نهجًا قائمًا على القطاع:
example.com/class/function/param بشكل افتراضي index.php مخبأة في عنوان URL. يتم ذلك باستخدام ملف .htaccess في دليل الجذر.
ما عليك سوى وضع الملفات في مشروعك لسهولة المصادقة: https://github.com/trafficinc/sippy-auth
وحدات التحكم هي القوة الدافعة لتطبيق sippy. كما ترون من بنية عنوان URL ، يتم تعيين شرائح عنوان URL إلى فئة ووظيفة. هذه الفئات هي وحدات تحكم مخزنة في دليل "التطبيق/وحدة التحكم". على سبيل المثال عنوان URL ...
example.com/main/login ... من شأنه أن يرسم إلى وحدة التحكم التالية مع اسم الملف main.php:
<?php
class Main extends Sippy_controller {
function index () {
// This is the default function (i.e. no function is set in the URL)
}
function login () {
echo ' Hello World! ' ;
}
}... وسيكون الإخراج "Hello World!".
يمكن تعيين وحدة التحكم الافتراضية ووحدة تحكم الخطأ في التطبيق/config/config.php
لاحظ أنه إذا كنت بحاجة إلى إعلان مُنشئ ، فيجب عليك أيضًا استدعاء مُنشئ الأصل مثل:
<?php
class Example extends Sippy_controller {
public function __construct ()
{
parent :: __construct ();
// Your own constructor code
}
}
?>هناك العديد من وظائف المساعد التي يمكن استخدامها أيضًا في وحدات التحكم. تأخذ معظم هذه الوظائف اسم المعلمة $ للفئة المقابلة:
سجل الأخطاء وتصحيح المعلومات
ثم يمكنك إضافة هذا الرمز إلى وحدة التحكم الخاصة بك لتصحيح الأخطاء.
log_message('error','Your log message');log_message('debug','Your log message');مثال على التحقق من صحة وحدة التحكم و CSRF حماية الرمز المميز وخطأ الفلاش/النجاح الرسائل: #Controller `` `` `styse_dir. '/valide.php' ؛ ###### - فئة - التحقق من صحة $ المحمية ؛
function __constructor() {
$this->validation = new Validation;
}
$data['messSuccess'] = $this->flash->message('success');
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if ($_POST['csrf'] === $_SESSION['csrf_token']) {
$validator = $this->validation->go($_POST, [
'email' => 'required|min:5',
'password' => 'required',
]);
if (count($validator) > 0) {
$data['errors'] = $validator;
} else {
// ** Do Stuff **
$this->flash->message('success','Your flash message here');
$this->redirect('auth/login');
}
}
}
```
#منظر
<h1>Login</h1>
<?php
if (isset($messSuccess)) {
$this->success_block($messSuccess);
}
if (isset($errors)) {
$this->error_block($errors);
}
?>
<form method="post" action="<?php echo site_url('auth/login'); ?>">
<input type="hidden" name="csrf" value="<?php echo $this->security->generate_csrf_token(); ?>"/>
<div class="form-group">
<label for="email">Email address</label>
<input type="email" name="email" class="form-control" id="email" placeholder="Email">
</div>
<div class="form-group">
<label for="password">Password</label>
<input type="password" name="password" class="form-control" id="password" placeholder="Password">
</div>
<button type="submit" class="btn btn-default">Login</button>
</form>
في Sippy ، يعد العرض ببساطة صفحة ويب. يمكن أن تحتوي على كل شيء ستشمله صفحة ويب عادية. يتم تحميل المشاهدات دائمًا تقريبًا بواسطة وحدات التحكم. على سبيل المثال ، إذا كان لديك طريقة عرض يسمى main_view.php الذي يحتوي على HTML التالي:
<html>
<head>
<title>My Site</title>
</head>
<body>
<h1>Welcome to my Site!</h1>
</body>
</html>
. . . you would load it in a controller by doing the following:
// Controller file...
<?php
class Main extends Sippy_controller {
function index ()
{
$ template = $ this -> View ( ' main_view ' );
$ template -> render ();
}
} تحتوي فئة العرض على وظيفة مساعد تسمى set($key, $val) تتيح لك تمرير المتغيرات من وحدة التحكم إلى العرض.
$ template = $ this -> View ( ' main_view ' );
$ template -> set ( ' someval ' , 17 );
$ template -> render ();... ثم في العرض يمكنك القيام به:
<?php echo $someval; ?>
... وسيكون الإخراج 17. يمكن تمرير أي نوع من متغير PHP إلى عرض بهذه الطريقة: المصفوفات ، إلخ.
أو
في وحدة التحكم ، يمكنك الاتصال بوجهات العرض الخاصة بك بالبيانات التي ستكون متاحة بعد ذلك في العرض. هذا يمكن تحقيقه لطرق. في وحدة التحكم ...
$ header = array ( ' title ' => ' My Title ' , ' descr ' => ' Login Page ' , ' keywords ' => ' login,page,mysample ' );
$ template = $ this -> View ( ' main/index ' , $ d );في العرض ، يمكن الوصول إلى عناصر الصفيف هذه مثل ...
<?php echo $title; ?>
الذي سيظهر النص "عنوان بلدي" ، وهكذا لبقية المصفوفة.
الطريقة المفضلة للوصول إلى البيانات في طرق العرض هي تسمية صفيف البيانات والوصول إليها في وحدة التحكم مثل ...
$ data [ ' body ' ] = " Hello World " ;
$ data [ ' heading ' ] = array ( ' title ' => ' My Title ' , ' descr ' => ' Login Page ' , ' keywords ' => ' login,page,mysample ' );
$ template = $ this -> View ( ' main/index ' , $ data );ثم في العرض ...
//body can be accessed
<?php echo $ body ; ?>
//heading can be accessed as an array
<?php
foreach ( $ heading as $ head ) {
echo $ head [ ' title ' ];
. . . etc.
}
?> في نماذج SIPPY عبارة عن فئات تتعامل مع البيانات (عادة من قاعدة بيانات) ، يتم توفير قاعدة بيانات عينة ، وتحميل ملف testdb.sql في Sequel Pro أو SQL GUI المفضل. على سبيل المثال:
<?php
class Example_model extends Sippy_model {
public function getSomething ( $ id )
{
$ id = $ this -> escape ( $ id );
$ result = $ this -> query ( " SELECT * FROM something WHERE id=' { $ id } ' " );
return $ result ;
}
}
?>... ثم في وحدة تحكم ستفعل:
function index ()
{
$ example = $ this -> Model ( ' Example_model ' );
$ data [ ' something ' ] = $ example -> getSomething ( $ id );
$ template = $ this -> View ( ' main_view ' , $ data );
$ template -> render ();
} الآن ستتوفر نتائج استعلام قاعدة البيانات الخاصة بك في عرضك في $ someval. يمكن إجراء الاتصال بقاعدة بيانات MySQL في ملف config/config.php الخاص بك (تذكر إعادة تسمية sample.config.php ):
$ config [ ' db_host ' ] = '' ; // Database host (e.g. localhost)
$ config [ ' db_name ' ] = '' ; // Database name
$ config [ ' db_username ' ] = '' ; // Database username
$ config [ ' db_password ' ] = '' ; // Database passwordهناك العديد من وظائف المساعد التي يمكن استخدامها أيضًا في النماذج:
query($query) - إرجاع مجموعة من النتائج من الاستعلامgetrow($query) - إرجاع صف واحد من الاستعلامgetrowobj($query) - إرجاع صف ككائنexecute($query) - إرجاع النتيجة المباشرة من الاستعلامescape($string) - سلاسل الهروب قبل استخدامها في الاستفساراتinsert($table, $dataArray) - أدخل في جدول مع صفيفيوجد مساعد مخبوز في HTML يمكنك استخدامه في وحدات التحكم والطرق عبر $ this-> html-> esc () وأكثر من ذلك ، في عنوان URL الخاص بك عند تشغيل Sippy ، انتقل إلى URL Main/Test لرؤية الوظائف المتاحة.
هناك نوعان من الموارد الإضافية التي يمكنك استخدامها في Sippy.
المساعدون هم الفصول التي يمكنك استخدامها والتي لا تندرج تحت فئة "وحدات التحكم". عادة ما تكون هذه فئات توفر وظائف إضافية يمكنك استخدامها في وحدات التحكم الخاصة بك. يأتي Sippy مع فئات المساعدة (Session_Helper و url_helper) والتي هي أمثلة على كيفية استخدام المساعدين.
المكونات الإضافية هي حرفيًا أي ملفات PHP ويمكنها توفير أي وظيفة تريدها. عن طريق تحميل مكون إضافي ، يمكنك ببساطة تضمين ملف PHP من مجلد "الإضافات". قد يكون هذا مفيدًا إذا كنت ترغب في استخدام مكتبات الجهات الخارجية في تطبيق Sippy الخاص بك.
كيفية استخدام ، في وحدة التحكم ...
protected $sess;
public function __construct() {
parent::__construct();
$this->Helper('Session_helper');
$this->sess = new Session_helper;
}
public function sample() {
$this->sess->set('email', '[email protected]'); //set session variable
$this->sess->get('email'); //get session variable
$this->sess->destroy(); //destroy session, good for logout method
}
كيفية استخدام ، في وحدة التحكم ...
public function __construct() {
parent::__construct();
$this->Plugin('Mailer');
}
public function sample() {
$send = Mailer::make()
->setTo('[email protected]', 'ToPerson')
->setFrom('[email protected]', 'Sippy')
->setSubject('Hello World Test')
->setMessage('Test message form sippy')
->setHtml()
->setWrap(100)
->send();
}
لتمديد Sippy ، هناك خيار لإضافة "السنانير". تتيح لك السنانير تمديد الإطار بأكمله و/أو إضافة وظائف. لتفعيل "الخطافات" ، انتقل إلى ملف config.php وتمكينه. ثم في ملف config/hooks.php ، أضف وظيفة الخطاف. السنانير عالمية وهناك ثلاثة منهم ؛ before_system (يتم تحميله قبل مكالمات النظام) ، before_controller (يتم تحميله قبل وحدات التحكم) ، و after_controller (تحميل بعد وحدات التحكم). هذا مثال ...
// in hooks.php file
$ hook [ ' before_system ' ] = function () {
echo " hello world " ;
};سيحمل هذا الخطاف هذه الوظيفة على مستوى العالم الذي يقول "Hello World". نظرًا لأنه يمكنك تحميل الخطاف مرة واحدة فقط ، إذا كان لديك أكثر من وظيفة للاتصال بها ، فيمكنك تكديسها مثل ...
//... your functions ... function func1() {...do stuff...}
$ hook [ ' before_system ' ] = function () {
func1 ();
func2 ();
func3 ();
};$ php bin/sippy.php [الخيارات]
يحاول
$ php bin/sippy.php -help