Guide

Dodawanie użytkownika można zrobić na wiele sposóbów np encje. Jednak przedstawię tutaj najszybszy sposób z minimalną ilością plików.

Jak mówi sama nazwa MVC zacznijmy od Modelu. Stówrzmy sobie Model pod ścieszką app/Model/Users.php

W jego zawartości umieśćmy.

namespace Model;

/**
 * Class UserModel
 *
 * @package Model
 */
class UserModel extends Model
{
    /**
     * Pobieranie listy użytkowników
     *
     * @return array
     */
    public function getUsers(){
        $results = $this->db->pdoQuery('SELECT * FROM `users`')->results();
        return $this->methodResult(true, ['data' => $results]);
    }
    
    /**
     * Pobranie użytkownika
     *
     * @return array
     */
    public function getUser($userId){
        $result = $this->db->pdoQuery('SELECT * FROM `users` WHERE `users`.`user_id` = ?', [$userId])->result();
        return $this->methodResult(true, ['user' => $result]);
    }
    
    /** 
     * Dodawanie użytkownika do bazy
     * @param array $user
     *
     * @return array
     */
    public function addUser($user)
    {
        $data = [
            'email' => $user['email']
        ];

        try {
            
            /**
             * Rozpoczęcie Transakcji
             */
            $this->db->start();

            $addedId = $this->db->insert('users', $data)->getLastInsertId();
            if (!isset($addedId)) {
                throw new \Exception('Cannot add new user.');
            }

            /**
             * Commit Transakcji
             */
            $this->db->end();

        } catch (\Exception $e) {

            /**
             * Rollback Transakcji
             */
            $this->db->back();
            return $this->methodResult(false, ['response' => $e->messages()]);
        }


        return $this->methodResult(true, ['lastInsertId' => $addedId]);
    }

}

Naszym widokiem w RESTAPI będzie json który jest wbudowany w klasę Dframe\Router\Request Przejdzmy do stowrzenia Controllera pod ścieszką app/Controller/Api/Users.php

namespace Controller\Api;

use Dframe\Router\Response;

/**
 * Class UserController
 *
 * @package Controller\Api
 */
class UserController extends \Dframe\Controller
{
    /**
     * Routing do tego kontrollera ustawimy na api/users
     * @return Response
     */
    public function index()
    {
        switch ($_SERVER['REQUEST_METHOD']) {
            case 'GET':

                $UsersModel = $this->loadModel('Users');
                $users = $UsersModel->getUsers();
                
                $data = ['users' => []]
                foreach($users as $key => $user) {
                    $data[] = [
                        'id' => $user['user_id'],
                        'email' => $user['user_email'],
                }
                
                return Response::renderJSON(['code' => 200, 'data' => $data])->status(200);
                break;

            case 'POST':

                $errors = [];
                if (!isset($_POST['email']) OR empty($_POST['email'])) {
                    $errors['email'] = 'Nie podano adres email.';
                }

                /**
                 * W tym miejscu możemy wstawć wszelkie walidacje.
                 */

                if (!empty($errors)) {
                    return Response::renderJSON(['code' => 400, 'message' => 'Invalid params', 'errors' => $errors])->status(400);
                }

                $data = [
                    'email' => (isset($_POST['email'])) ? htmlspecialchars($_POST['email']) : '',
                ];

                $UsersModel = $this->loadModel('Users');

                try {

                    $addUser = $UsersModel->addUser($data);
                    if (!isset($addUser) OR $addUser['return'] !== true) {
                        throw new \Exception('Error model...');
                    }

                    if (!is_numeric($addUser['lastInsertId']) OR $addUser <= 0) {
                        throw new \Exception('Invalid id.');
                    }

                } catch (\Exception $e) {
                    return Response::renderJSON(['code' => 500, 'message' => 'Internal Error'])->status(500);
                }

                return Response::renderJSON(['code' => 200, 'response' => 'Account Created.', 'data' => ['user' => ['id' => $addUser['lastInsertId']]]])->status(200);
                break;

        }
        return Response::renderJSON(['code' => 405, 'message' => 'Method not allowed.'])->status(405);
    }


    /**
     * Routing do tego kontrollera ustawimy na api/users/:userId
     *
     * @return Response
     */
    public function one()
    {
        switch ($_SERVER['REQUEST_METHOD']) {

            case 'GET':

                $UsersModel = $this->loadModel('Users');
                $user = $UsersModel->getUser($_GET['userId']);
                if (is_null($user['data'])) {
                    return Response::renderJSON(['code' => 404, 'message' => 'User not found.']])->status(404);
                }
                
                $data = [
                    'user' => [
                        'id' => $user['user_id']
                        'email' => $user['user_email']
                    ]
                ];

                return Response::renderJSON(['code' => 200, 'data' => $data])->status(200);
                break;


        }
        
        return Response::renderJSON(['code' => 405, 'message' => 'Method not allowed.'])->status(405);
    }

}

Teraz już do poprawnego działania potrzebujemy tylko odpowiedniego Routingu. W pliku app/Config/router.php, do naszego routingu musimy dodać odpowiednie adresowanie.

'routes' => [

    /** ... */
    
    'api/users' => [
        'api/users',
        'task=api,users&action=index',
    ],

    'api/users/:userId' => [
        'api/users/[userId]/',
        'task=api,users&action=index',
        'userId' => '([0-9]+)',
    ]

]
Edit page (Guide/basic-rest-api)