Chào các bạn hôm nay mình sẽ cùng với các bạn đi tìm hiểu cách dùng RESTful trong yii2 .

Restful có chức năng tác dụng giúp cho các website hoặc ứng dụng khác có thể xử dụng lại các dữ liệu của chúng ta .Ví dụ như 1 RESTful về tính năng xử lý bài viết giúp cho các thành viên của trang web chúng ta có thể tương tác với website bằng 1 ứng dụng viết bài khác hoặc 1 web khác

Các bước chuẩn bị để bắt đầu viết RESTful là :

Tạo cơ sở dữ liệu

Chúng ta tạo 1 cơ sở dữ liệu gồm các trường như sau id,name,value .Dưới đây là đoạn sql tạo cơ sở dữ liệu của mình

-- phpMyAdmin SQL Dump
-- version 4.5.1
-- http://www.phpmyadmin.net
--
-- Host: 127.0.0.1
-- Generation Time: May 09, 2017 at 01:08 AM
-- Server version: 10.1.16-MariaDB
-- PHP Version: 5.6.24

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";

--
-- Database: `demoyii2`
--

-- --------------------------------------------------------

--
-- Table structure for table `rest`
--

CREATE TABLE `rest` (
  `id` int(11) NOT NULL,
  `name` varchar(300) NOT NULL,
  `value` varchar(300) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Dumping data for table `rest`
--

INSERT INTO `rest` (`id`, `name`, `value`) VALUES
(1, 'demo1', 'demo1'),
(2, 'demo3', 'gia tri 3'),
(3, 'demo3', 'gia tri 3');

--
-- Indexes for dumped tables
--

--
-- Indexes for table `rest`
--
ALTER TABLE `rest`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `rest`
--
ALTER TABLE `rest`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=25;

Tạo model truy vấn cơ sở dữ liệu

Bạn tạo 1 file như sau : common/models/Rest.php như sau :

<?php
namespace common\models;
use Yii;

/**
 * This is the model class for table "rest".
 *
 * @property integer $id
 * @property string $name
 * @property string $value
 */
class Rest extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'rest';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['name', 'value'], 'required'],
            [['name', 'value'], 'string', 'max' => 300],
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => Yii::t('app', 'ID'),
            'name' => Yii::t('app', 'Name'),
            'value' => Yii::t('app', 'Value'),
        ];
    }
}

Ok vậy là xong các bước chuẩn bị.Giờ chúng ta đến bước viết RESTful .

2: RESTful với Yii2

Có 2 cách viết RESTful trong yii2 mà chúng ta cần biết đó là :

  1. Dùng qua ActiveController
  2. Dùng qua Controller

Dùng qua ActiveController

Thư viện  yii\rest\ActiveController  đã cung cấp 1 các đầy đủ RESTful cho chúng ta nên chỉ cần viết controller frontend\controllers\DemopostController.php

<?php
namespace frontend\controllers;
use yii\web\Controller;
use yii\web\Response;
use yii\rest\ActiveController;

class DemopostController extends ActiveController
{
	public $modelClass = 'common\models\Rest';
}

Vậy là xong .Các bạn có thể nom demo đó ở link https://demo.hbsprogram.com/demopost

Chúng ta có thể tùy biến ActiveController rất cao .Ví dụ như không cho người dùng truy vấn xóa dữ liệu hoặc có thể lọc truy vấn

public function actions() {
        $actions = parent::actions();
        // không cho người dùng xóa và tạo dữ liệu
        unset($actions['delete'], $actions['create']);
        // lấy các thành phần truy vấn ví dụ như là truy vấn với tham số như
        // lấy dữ liệu với status la active :
        $actions['index']['prepareDataProvider'] = [$this, 'prepareDataProvider'];
        return $actions;
    }

 public function prepareDataProvider()
 {
 $query = \common\models\Rest::find()->where(['status'=>'active']);
 return new ActiveDataProvider(['query' => $query,]);
 }

Cách này là cách làm chuẩn theo chuẩn RESTful .Còn cách dưới mình sử dụng yii\web\Controller

<?php

namespace frontend\controllers;

use yii\web\Controller;
use common\models\Rest;
use yii\httpclient\Client;

class Demopostv2Controller extends Controller {
	public $enableCsrfValidation = false;
	public function actionIndex() {
		\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
		$rest = Rest::find ()->all ();
		return $rest;
	}
	public function actionCreate() {
		\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
		$rest = new Rest ();
		$rest->attributes = \Yii::$app->request->post ();
		if ($rest->validate ()) 

		{
			
			$rest->save ();
			
			return array (
					'status' => 1,
					'data' => 'Đã thêm thành công' 
			);
		} 

		else 

		{
			
			return array (
					'status' => 0,
					'data' => $student->getErrors () 
			);
		}
	}

}

Link demo :https://demo.hbsprogram.com/demopostv2

Cách này chúng ta sử dụng đơn giản hơn nhược điểm sẽ làm khó cho các bạn đọc code của bạn sau này

Có gì thắc mắc các bạn liên hệ qua skype :hien_cpa hoặc comment dưới bài viết nhé

Leave a Reply

Your email address will not be published. Required fields are marked *