Yii - Campi

Sovrascrivendo fields() and extraFields()metodi, è possibile definire quali dati possono essere inseriti in una risposta. La differenza tra questi due metodi è che il primo definisce l'insieme di campi predefinito, che dovrebbe essere incluso nella risposta mentre il secondo definisce campi aggiuntivi, che possono essere inclusi nella risposta se un utente finale li richiede tramite ilexpand parametro di query.

Step 1 - Modifica il file MyUser modello in questo modo.

<?php
   namespace app\models;
   use app\components\UppercaseBehavior;
   use Yii;
   /**
   * This is the model class for table "user".
   *@property integer $id * @property string $name
   * @property string $email */ class MyUser extends \yii\db\ActiveRecord { public function fields() { return [ 'id', 'name', //PHP callback 'datetime' => function($model) {
               return date("d:m:Y H:i:s");
            }
         ];
      }
      /**
      * @inheritdoc
      */
      public static function tableName() {
         return 'user';
      }
      /**
      * @inheritdoc
      */
      public function rules() {
         return [
            [['name', 'email'], 'string', 'max' => 255]
         ];
      }
      /**
      * @inheritdoc
      */
      public function attributeLabels() {
         return [
            'id' => 'ID',
            'name' => 'Name',
            'email' => 'Email',
         ];
      }
   }
?>

Oltre ai campi predefiniti: id e nome, abbiamo aggiunto un campo personalizzato - datetime.

Step 2 - In Postman, esegui l'URL http://localhost:8080/users.

Step 3 - Ora, modifica il file MyUser modello in questo modo.

<?php
   namespace app\models;
   use app\components\UppercaseBehavior;
   use Yii;
   /**
   * This is the model class for table "user".
   *
   * @property integer $id * @property string $name
   * @property string $email
   */
   class MyUser extends \yii\db\ActiveRecord {
      public function fields() {
         return [
            'id',
            'name',
         ];
      }
      public function extraFields() {
         return ['email'];
      }
      /**
      * @inheritdoc
      */
      public static function tableName() {
         return 'user';
      }
      /**
      * @inheritdoc
      */
      public function rules() { 
         return [
            [['name', 'email'], 'string', 'max' => 255]
         ];
      }
      /**
      * @inheritdoc
      */
      public function attributeLabels() { 
         return [
            'id' => 'ID',
            'name' => 'Name',
            'email' => 'Email',
         ];
      }
   } 
?>

Si noti che il campo dell'email viene restituito da extraFields() metodo.

Step 4 - Per ottenere dati con questo campo, esegui http://localhost:8080/users?expand=email.

Personalizzazione delle azioni

Il yii\rest\ActiveController class fornisce le seguenti azioni:

  • Index - Elenca le risorse pagina per pagina

  • View - Restituisce i dettagli di una risorsa specificata

  • Create - Crea una nuova risorsa

  • Update - Aggiorna una risorsa esistente

  • Delete - Elimina la risorsa specificata

  • Options - Restituisce i metodi HTTP supportati

Tutte le azioni precedenti sono dichiarate nel metodo delle azioni ().

Per disabilitare le azioni "elimina" e "crea", modificare il file UserController in questo modo -

<?php
   namespace app\controllers;
   use yii\rest\ActiveController;
   class UserController extends ActiveController {
      public $modelClass = 'app\models\MyUser';
      public function actions() {
         $actions = parent::actions(); // disable the "delete" and "create" actions unset($actions['delete'], $actions['create']); return $actions;
      }
   }
?>

Gestione degli errori

Quando si ottiene una richiesta API RESTful, se si verifica un errore nella richiesta o si verifica qualcosa di imprevisto sul server, è possibile semplicemente generare un'eccezione. Se riesci a identificare la causa dell'errore, dovresti generare un'eccezione insieme a un codice di stato HTTP appropriato. Yii REST utilizza i seguenti stati:

  • 200 - OK.

  • 201- Una risorsa è stata creata con successo in risposta a una richiesta POST. L'intestazione Location contiene l'URL che punta alla risorsa appena creata.

  • 204 - La richiesta è stata gestita correttamente e la risposta non contiene contenuto.

  • 304 - La risorsa non è stata modificata.

  • 400 - Cattiva richiesta.

  • 401 - Autenticazione fallita.

  • 403 - L'utente autenticato non è autorizzato ad accedere all'endpoint API specificato.

  • 404 - La risorsa non esiste.

  • 405 - Metodo non consentito.

  • 415 - Tipo di supporto non supportato.

  • 422 - Convalida dei dati non riuscita.

  • 429 - Troppe richieste.

  • 500 - Errore interno del server.