เฟรมเวิร์ก PHP ที่มีน้ำหนักเบาและใช้งานง่ายสำหรับการสร้างเว็บไซต์และเว็บแอพ
สถาปัตยกรรมของ Sippy นั้นมีความคล้ายคลึงกับ Codeigniter ดังนั้นเราจึงเรียกมันว่ากรอบ PHP ที่มีน้ำหนักเบา อย่างไรก็ตามโปรดจำไว้ว่าเนื่องจาก Sippy มีน้ำหนักเบาจึงไม่รวมฟังก์ชันการทำงานมากมายที่มาพร้อมกับ CodeIgniter บางทีเราสามารถเพิ่มฟังก์ชั่น "plug-n-play" ผ่านปลั๊กอิน, คอนโทรลเลอร์และไลบรารี หากต้องการใช้ลบ "ตัวอย่าง" จากไฟล์ config ในแอปพลิเคชัน/config/sample.config.php ดังนั้นจึงเป็นแอปพลิเคชัน/config/config.php และกรอกข้อมูลการกำหนดค่าของคุณ
Sippy ขึ้นอยู่กับรูปแบบการพัฒนาแบบจำลอง-คอนเทอร์เลอร์
ไฟล์เฉพาะแอปพลิเคชันของคุณไปในโฟลเดอร์ "แอปพลิเคชัน" (คุณไม่จำเป็นต้องแตะโฟลเดอร์ระบบ) ภายในโฟลเดอร์แอปพลิเคชันมีโฟลเดอร์สำหรับเอนทิตีแอปพลิเคชันเฉพาะทั้งหมด:
คอนโทรลเลอร์คอนโทรลเลอร์ผู้ช่วยเหลือบันทึกโมเดลปลั๊กอินมุมมอง
เมื่อ 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 " />คลาสทั้งหมดในการตั้งชื่อ pascalcase ใช้ sippy ชื่อไฟล์ที่เกี่ยวข้องจะต้องเหมือนกันยกเว้นตัวพิมพ์เล็กทั้งหมด ตัวอย่างเช่นคลาส MainClass คลาสจะมีชื่อไฟล์ mainclass.php ขีดเส้นใต้ในชั้นเรียนจะต้องรวมอยู่ในชื่อไฟล์เช่นกัน
โดยค่าเริ่มต้น URL ใน Sippy ได้รับการออกแบบให้เป็นเครื่องยนต์ค้นหาและเป็นมิตรกับมนุษย์ แทนที่จะใช้วิธี "String String" มาตรฐานไปยัง URL ที่มีความหมายเหมือนกันกับระบบไดนามิก Sippy ใช้วิธีการตามเซ็กเมนต์:
example.com/class/function/param โดยค่าเริ่มต้น index.php ถูกซ่อนอยู่ใน URL สิ่งนี้ทำโดยใช้ไฟล์. htaccess ในไดเรกทอรีรูท
เพียงใส่ไฟล์ลงในโครงการของคุณเพื่อการตรวจสอบความถูกต้องง่าย: https://github.com/trafficinc/sippy-auth
คอนโทรลเลอร์เป็นแรงผลักดันของแอปพลิเคชั่นที่มีความสุข อย่างที่คุณเห็นจากโครงสร้าง 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!"
ตัวควบคุมเริ่มต้นและตัวควบคุมข้อผิดพลาดสามารถตั้งค่าใน Application/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 `` `ต้องการ System_dir. '/validation.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 ();
}
} คลาส View มีฟังก์ชั่นผู้ช่วยที่เรียกว่า 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 ลงในภาคต่อของ 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) - Escape Strings ก่อนที่จะใช้ในการสืบค้นinsert($table, $dataArray) - แทรกลงในตารางที่มีอาร์เรย์มีการอบในตัวช่วย HTML ที่คุณสามารถใช้ในคอนโทรลเลอร์และมุมมองผ่าน $ this-> html-> esc () และอื่น ๆ ใน URL ของคุณเมื่อคุณเรียกใช้ sippy ไปที่ URL หลัก/ทดสอบเพื่อดูฟังก์ชั่นที่มีอยู่
มีทรัพยากรเพิ่มเติมสองประเภทที่คุณสามารถใช้ใน Sippy
ผู้ช่วยคือคลาสที่คุณสามารถใช้ที่ไม่อยู่ภายใต้หมวดหมู่ของ "คอนโทรลเลอร์" เหล่านี้มักจะเป็นคลาสที่ให้ฟังก์ชั่นพิเศษที่คุณสามารถใช้ในคอนโทรลเลอร์ของคุณ Sippy มาพร้อมกับคลาส Helper (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 มีตัวเลือกในการเพิ่ม“ hooks” ตะขอช่วยให้คุณสามารถขยายกรอบการทำงานทั้งหมดและ/หรือเพิ่มฟังก์ชั่น หากต้องการเปิดใช้งาน 'hooks' เข้าสู่ไฟล์ config.php ของคุณและเปิดใช้งาน จากนั้นในไฟล์ config/hooks.php เพิ่มฟังก์ชั่น hook ของคุณ ตะขอเป็นระดับโลกและมีสามตัว before_system (โหลดก่อนการโทรของระบบ), before_controller (โหลดก่อนคอนโทรลเลอร์) และ after_controller (โหลดหลังจากตัวควบคุม) นี่คือตัวอย่าง ...
// in hooks.php file
$ hook [ ' before_system ' ] = function () {
echo " hello world " ;
};เบ็ดนี้จะโหลดฟังก์ชั่นนี้ทั่วโลกที่ระบุว่า "สวัสดีโลก" เนื่องจากคุณสามารถโหลดตะขอได้เพียงครั้งเดียวหากคุณมีฟังก์ชั่นมากกว่าหนึ่งฟังก์ชั่นคุณสามารถซ้อนกันได้เช่น ...
//... your functions ... function func1() {...do stuff...}
$ hook [ ' before_system ' ] = function () {
func1 ();
func2 ();
func3 ();
};$ php bin/sippy.php [ตัวเลือก]
พยายาม
$ php bin/sippy.php -help