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.