Monday, July 3, 2023

ทบทวนการใช้งาน Slim Framework 4 การสร้าง get, post และ สร้าง multi db connection

  • กรณี rest api เราใช้เป็น site/subfolder ให้เราเพิ่มพาธ subfolder เข้าไปใน index.php ของ slim framework ด้วยเช่น

/** set path for app subdirectory */

$app->setBasePath('/subapi');

  • สร้างไฟล์ method แยก myapi.php  ให้วางไว้ใน app/myapi.php
  • และใน index.php ของ root slim framework ให้เพิ่ม

// Register myapi

$myapis = require __DIR__ . '/app/myapis.php';

$myapis($app);

  • การสร้าง get method

....

$app->get('/md5/{par1}', function(Request $request, Response $response, $args){

        $par1 = $args['par1'];

        $response->getBody()->write(md5($par1));

        return $response;

});

....

  • การสร้าง post method

...

$app->post('/md5', function (Request $request, Response $response, $args) {

$data = $request->getParsedBody();

        $par1 = $data["par1"];

        $response->getBody()->write(md5($par1));

        return $response;

});

...

  • การส่งค่ากลับเป็น json

...

$app->post('/md5', function (Request $request, Response $response, $args) {

$data = $request->getParsedBody();

        $par1 = $data["par1"];

        $payload = json_encode(

              array(

                    "result"=>md5($par1)

                )

            );

$response->getBody()->write($payload);

$content_type = "application/json"; // 'text/html'

$status = 200; // 500

        return $response->withHeader('Content-Type', $content_type)->withStatus($status);

});

...

  • การสร้าง db connection หลายตัวใน api site เดียวกันนี้ ให้เราแก้ไข app/settings.php

  • และไฟล์ app/dependencies.php

  • การเรียกใช้ db connection ของเราใน myapi.php
$db1 = $this->get(PDO::class); 
$db2 = $this->get("db2");

$db3 = $this->get("db3"); 

  • ตัวอย่างการเรียกใช้ connection

$par1 = "value1";

$par2 = "value2";

$sql = "select * from mytb where col1=:par1 && col2=:par2;";

$stmt = $db1->prepare($sql);

$stmt->bindValue(":par1", "%{$par1}%");

$stmt->bindParam(":par2", $par2);

$stmt->execute();

$row_count = $stmt->rowCount();

$result = $stmt->fetchAll(PDO::FETCH_ASSOC);


No comments:

Post a Comment