كيفاش تصوب Rest Api بإستعمال SlimFramework الجزء الأول


فهاد المشروع الجديد غادي نشوفو كيفاش نصاوبو Rest Api بإستعمال SlimFramework هاد ل Api غادي تمكنا من إنشاء blog كنزيدو les posts فقاعدة البيانات من بعد المستخدم كيمكنلو يشوف يعدل او يحدف post فهنا غادي نخدمو ب jquery و ajax لإرسال واسترجاع المعلومات من قاعدة البيانات.

نظرة سريعة بالفيديو

1- تحميل المشروع

أول حاجة غادي تمشي ل c:\xammp\htdocs وغادي تزيد مجلد جديد سميه slim-blog منبعد نمشيو للموقع الرسمي https://www.slimframework.com/docs/start/installation.html من هنا غادي تلقى كيفاش تحمل slimframework راه سبقلي شرحتو فدروس سابقة فقط كتinstaller composer منبعد كتمشي ل cmd كتدير ل command cd c:\xampp\htdocs\slim-blog كنتي خدام ب wamp ولا easyphp كتمشي ل www/slim-blog منبعد كتدير هاد ل command composer require slim/slim "^3.0" هنا يتزاد واحد المجلد سميتو vendor فالمجلد ديال المشروع ديالنا منبعد غادي تزيد قاعدة بيانات جديدة ف phpmyadmin سميها slimblog الكود باش تزيد الجداول هو :

                                --
-- Structure de la table `categories`
--

CREATE TABLE `categories` (
  `id` int(11) NOT NULL,
  `title` varchar(255) NOT NULL,
  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Structure de la table `posts`
--

CREATE TABLE `posts` (
  `id` int(11) NOT NULL,
  `category_id` int(11) NOT NULL,
  `title` varchar(255) NOT NULL,
  `body` text NOT NULL,
  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

                            

2- الإتصال بقاعدة البيانات

فالمجلد ديال المشروع لي هو slim-blog زيد جوج مجلدات واحد public والثاني app ف app زيد ملف جديد سميه db.php غادي يكونوا فيه des constantes لي غادي نخدمو بهم فla connexion مع قاعدة البيانات الكود ديال الملف هو :

                                <?php
define("DSN", "mysql:host=localhost;dbname=slimblog");
define("USERNAME", "root");
define("PASSWORD", "");
                            

3- الملفات الأساسية

فالمجلد public زيد مجلد جديد سميه includes من بعد غادي تزيد فيه ملف تسميه header.php و آخر تسميه footer.php الملف header.php فيه الروابط لي كيضيفو css للمشروع ديالنا والقائمة ديال التصفح لي كتمكن من التنقل بين الصفحات الكود ديالو هو :

                                <!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">
    <title>Starter Template for Bootstrap</title>
    <!-- Bootstrap core CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
  </head>
  <body>
    <nav class="navbar navbar-inverse">
      <div class="container">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <a class="navbar-brand" href="#">Slim Blog</a>
        </div>
        <div id="navbar" class="collapse navbar-collapse">
          <ul class="nav navbar-nav">
            <li class="active"><a href="index.php">Accueil</a></li>
            <li><a href="add.php">Ajouter un post</a></li>
          </ul>
        </div><!--/.nav-collapse -->
      </div>
    </nav>
                            

4- الملف footer.php

هاد الملف غادي يكون هو الأساس ديال كل الصفحات ولي فيه الروابط ديال javascript و jquery الكود ديال الملف هو :

                                     <!-- Bootstrap core JavaScript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
   <!-- Latest compiled and minified JavaScript -->
   <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
   <script src="public/js/main.js"></script>
  </body>
</html>

                                

5- الملف category.php

فالمجلد app زيد مجلد جديد سميه api فيه زيد ملف سميه category.php من بعد مكن créer l'objet مل la class App كنخدم بها فأولا كنخدم ب get لي كنعطيها الرابط منبعد كنخدم ب pdo باش كنسترجع كل les catégories لي عندي وكنعرضهم sous form json منبعد كاين الكود ليكيمكن من إسترجاع catégorie لي غادي يختار المستخدم بالإعتماد على ل id وكتعرض sous form json من بعد كاين الكود لي كايزيد catégorie دائما بإستعمال pdo ثم الكود لي كيعدل catégorie فالكود لي كيحدف catégorie الكود ديال الملف هو:

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



$app = new \Slim\App;
//get all categories
$app->get('/api/categories', function (Request $request, Response $response) {
    try{
        $options = array(PDO::ATTR_PERSISTENT => true);
        $con = new PDO(DSN, USERNAME, PASSWORD, $options);
        $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);   
        $query = "SELECT * FROM categories";
        $statement  = $con->query($query);
        $categories = $statement->fetchAll(PDO::FETCH_OBJ);
        echo json_encode($categories);
    }catch (PDOException $ex){
        echo "Une erreur est survenue".$ex->getMessage();
    }
});
//get single category
$app->get('/api/category/{id}', function (Request $request, Response $response) {
try{
    $id = $request->getAttribute('id');
    $options = array(PDO::ATTR_PERSISTENT => true);
    $con = new PDO(DSN, USERNAME, PASSWORD, $options);
    $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);   
    $query = "SELECT * FROM categories WHERE id = '$id'";
    $statement  = $con->query($query);
    $categorie = $statement->fetchAll(PDO::FETCH_OBJ);
    echo json_encode($categorie);
}catch (PDOException $ex){
    echo "Une erreur est survenue".$ex->getMessage();
}
});
//add category
$app->post('/api/category/add', function (Request $request, Response $response) {
    $options = array(PDO::ATTR_PERSISTENT => true);
    $con = new PDO(DSN, USERNAME, PASSWORD, $options);
    $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);   
    $title = $request->getParam('title');
    $query = "INSERT INTO categories(title,created_at)
                    VALUES (:title,now())";
    try{
        $statement  = $con->prepare($query);
        $statement->execute(array(":title"=>$title));
        echo "Categorie ajoutée";
    }catch (PDOException $ex){
        echo "Une erreur est survenue".$ex->getMessage();
    }
});
//update category
$app->put('/api/category/update/{id}', function (Request $request, Response $response) {
    $options = array(PDO::ATTR_PERSISTENT => true);
    $con = new PDO(DSN, USERNAME, PASSWORD, $options);
    $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);   
    $id = $request->getAttribute('id');
    $title = $request->getParam('title');
    $query = "UPDATE categories SET title = :title WHERE id=:id";
    try{
        $statement  = $con->prepare($query);
        $statement->execute(array(":title"=>$title,":id"=>$id));
        echo "Categorie modifiée";
    }catch (PDOException $ex){
        echo "Une erreur est survenue".$ex->getMessage();
    }
});
//delete category
$app->delete('/api/category/delete/{id}', function (Request $request, Response $response) {
    $id = $request->getAttribute('id');
    $options = array(PDO::ATTR_PERSISTENT => true);
    $con = new PDO(DSN, USERNAME, PASSWORD, $options);
    $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);   
    $query = "DELETE FROM categories WHERE id=:id";
    try{
        $statement  = $con->prepare($query);
        $statement->execute(array(":id"=>$id));
        echo "Catégorie supprimée";
    }catch (PDOException $ex){
        echo "Une erreur est survenue".$ex->getMessage();
    }
});

                                


إشترك في قناتنا على اليوتيوب

بحث في الموقع


إشترك للتوصل بالجديد