การติดตั้งและใช้งาน Slim framework 4 เบื้องต้น

เขียนเมื่อ 2 ปีก่อน โดย Ninenik Narkdee
php framework slim php api

คำสั่ง การ กำหนด รูปแบบ ตัวอย่าง เทคนิค ลูกเล่น การประยุกต์ การใช้งาน เกี่ยวกับ php framework slim php api

ดูแล้ว 5,515 ครั้ง


เนื้อหานี้จะมาแนะนำ Slim ซึ่งเป็น PHP framework ขนาดเล็ก
ที่จะช่วยพัฒนาเว็บแอพลิเคชั่นและ API ได้อย่างง่ายและมี
ประสิทธิภาพ เนื้อหานี้จะไม่ได้ลงรายละเอียดอะไรมากนัก เป็นเพียง
แนวทางการติดตั่งและใช้งานเบื้องต้น หลักๆ การทำงานของ slim ก็คือ
การรับคอยรับ HTTP request ที่ส่งเข้ามา แล้วกำหนดรูปแบบการจัดการ
การทำงานของจากนั้นก็ส่งค่า HTTP response กลับออกมาแสดง
ถ้าใครได้ดูเนื้อหาเกี่ยวกับ NodeJs หรือการใช้งานเกี่ยวกับ HTTP Request
Response ก็น่าจะคุ้ยเคยกับรูปแบบการทำงานลักษณะนี้ดี
    Slim เหมาะสำหรับนำมาใช้ในการพัฒนา API เพื่อจัดการกับข้อมูลเพื่อใช้งาน
ร่วมกับการพัฒนาอื่นๆ ที่สำคัญก็คือ slim เขียนโค้ดน้อยและทำงานได้เร็ว
 
 

การติดตั้ง Slim framework 4

    สมมติเราต้องการติดตั้ง slim มาใช้สร้าง api ให้กับเว็บเดิมที่เรามีอยู่แล้ว ในที่นี้เราจะจำลองที่
เครื่อง local เว็บไซต์โปรเจ็คของเราอยู่ในโฟลเดอร์ demo และเราจะสร้างโฟลเดอร์ api สำหรับ
ใช้งาน slim framework จะได้ path ดังนี้
 
    C: xampp > htdocs > demo > api
    
    ติดตั้ง Slim framework 4 ด้วย Composer 
 
composer require slim/slim:"4.*"
 
    ติดตั้งตัวจัดการร่วมกับ PSR-7 ในที่นี้เราเลือกใช้ Slim PSR-7
 
composer require slim/psr7
 
    PSR-7 คือรูปแบบการจัดการเกี่ยวกับ HTTP ที่กำหนดให้ใช้งานในลักษณะเดียวกัน หรือก็คือ
HTTP message interfaces ที่กำหนดหน้าตาและการใช้งานให้ไปในทิศทางเดียวกันหรือเหมือนกัน

 
 

การใช้งาน Slim framework 4 เบื้องต้น

    ต่อไปสร้างไฟล์ index.php เริ่มต้นดังนี้
 
<?php
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;

require './vendor/autoload.php';

// กำหนด slim instance app
$app = AppFactory::create();
// กำหนด BasePath
$app->setBasePath('/demo/api/index.php');

// กำหนด Routing
$app->get('/', function (Request $request, Response $response, $args) {
    $response->getBody()->write("Hello world!");
    return $response;
});

$app->run();
 
    คำสั่งการทำงานข้างต้นคือ เราต้องการให้เรียกไปยัง url ตามที่กำหนด routing เป็น
 
https://localhost/demo/api/index.php/
 
    แล้วแสดงข้อความว่า Hello world!  สังเกตว่า ถ้าเราไม่กำหนด BasePath จะเกิด error ขึ้น เพราะ
จะไม่สามารถระบุตำแหน่งของ route ได้ถูกต้อง 
 
 


 
 
    สมมติว่าเราติดตั้ง slim ไว้ใน root ของ server หรือก็คือใน htdocs เราก็ไม่ต้องกำหนด BasePath
ก็ได้ เพราะเมื่อเราเข้าไปยังหน้า https://localhost/ ก็จะหมายถึง https://localhost/index.php 
    แต่ข้างต้นเราสร้างไว้ในโฟลเดอร์ย่อยอีกที จึงต้องกำหนด path ให้ถูกต้อง
 
    เราลองเพิ่มส่วนของ route เข้าไปสมมติเป็นหน้า wellcome ดังนี้
 
$app->get('/home', function (Request $request, Response $response, $args) {
    $response->getBody()->write("Welcome!");
    return $response;
});
 
    เมื่อเรียกใช้งานก็จะได้เป็น ดังนี้
 
 

 
 
    ตอนนี้เรามี route อยู่สองอันคือ
 
https://localhost/demo/api/index.php/
https://localhost/demo/api/index.php/home
 
    ถ้าสมมติเราเรียกไปยัง route ที่ไม่ได้กำหนดไว้ เช่น /contact ก็จะขึ้น error ขึ้นดังรูป
 
 


 
 
    เป็น HttpNotFoundException หรือก็คือไม่พบหน้าที่กำลังเรียกดู และเนื่องจากเรายังไม่ได้
จัดการ error จึงแสดงรูปแบบดังกล่าว ให้เราเพิ่มการจัดการ error เบื้องต้น เข้าไปดังนี้
 
$app->addErrorMiddleware(true, true, true);
 
    กำหนดไว้ก่อนการกำหนด routing ตัวค่า boolean ทั้ง 3 เป็น parameter ของค่า displayErrorDetails
logErrors และ logErrorDetails โดยตัวแรกเป็นการกำหนดให้แสดงรายละเอียดของ error หรือไม่
อีกสองอัน จะเป็นการกำหนดในส่วนของ log ไฟล์ที่จะให้บันทึก หรือไม่
 
    ดูหน้าตาที่เปลี่ยนไป กรณีไม่เจอ route ที่กำหนด
 
 


 
 
    และเราลองเปลี่ยนค่าแรกเป็น false
 
$app->addErrorMiddleware(false, true, true);
 
    ก็จะแสดงเฉพาะข้อความตามรูป และไม่แสดงรายละเอียด error
 
 


 
 
 
    สังเกตว่าเวลาเราเรียกใช้งานผ่าน url จะมีชื่อไฟล์ index.php ด้วย เราต้องการตัดออกไป ก็สามารถ
กำหนดในไฟล์ .htaccess ได้ดังนี้
 
    ไฟล์ .htaccess
 
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]
 
    เราลองเรียกไปยังหน้า /home เป็นดังนี้ดู
 
 


 
 
    เกิด 404 error หา route ไม่เจอ ก็เพราะว่าเราต้องไปแก้ไข basePath ให้ถูกต้องก่อนดังนี้
 
// เดิม $app->setBasePath('/demo/api/index.php');
$app->setBasePath('/demo/api');
 
    ทั้งนี้การกำหนด path ต้องให้สอดรับกับ url ที่เรียกใช้งาน จะเห็นว่า หลังคำว่า api เราไม่ต้อง
กำหนด / เข้าไป เพราะอยู่ในส่วนของการกำหนด routing แล้ว เวลาเรียกใช้ ก็จะได้ route เป็น
 
https://localhost/demo/api/home
 
    ผลลัพธ์ก็จะแสดงถูกต้องดังรูป
 
 


 
 

    ไฟล์ index.php

 
<?php
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;

require './vendor/autoload.php';

// กำหนด slim instance app
$app = AppFactory::create();
// กำหนด path
$app->setBasePath('/demo/api');

// กำหนดการจัดการเกี่่ยวกับ error
$app->addErrorMiddleware(false, true, true);

// กำหนด Routing
$app->get('/', function (Request $request, Response $response, $args) {
    $response->getBody()->write("Hello world!");
    return $response;
});

$app->get('/home', function (Request $request, Response $response, $args) {
    $response->getBody()->write("Welcome!");
    return $response;
});

$app->run();
 
    เนื้อหานี้เป็นเนื้อหาเบื้องต้น ให้เราพร้อมสำหรับการใช้งาน slim framework รอเนื้อหาเกี่ยวกับ slim ใน
บทความต่อไป 


กด Like หรือ Share เป็นกำลังใจ ให้มีบทความใหม่ๆ เรื่อยๆ น่ะครับ



อ่านต่อที่บทความ









เนื้อหาที่เกี่ยวข้อง









URL สำหรับอ้างอิง





คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )







เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ