Field ها در فریمورک Yii
با استفاده از متدهای overrides () و extraFields () می توانید تعریف کنید که چه اطلاعاتی را می توان در پاسخ (response) قرار داد. تفاوت بین این دومتد در این است که اولی مجموعه ای از فیلد های پیش فرض را تعریف می کند که باید در پاسخ گنجانده شوند در حالی که دومی فیلدهای اضافی را تعریف می کند، که اگر یک کاربر نهایی یک کوئری با پارامتر expand درخواست کند، ممکن است در پاسخ گنجانده شوند.
مرحله 1 - مدل MyUser را اینگونه تغییر دهید.
<?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',
];
}
}
?>
علاوه بر فیلدهای پیش فرض: id و name، ما یک فیلد سفارشی به نام datetime اضافه کرده ایم.
مرحله 2 - در Postman آدرس http://localhost:8080/users را اجرا کنید.
مرحله 3 - حالا مدل MyUser را اینگونه تغییر دهید.
<?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',
];
}
}
?>
توجه داشته باشید که فیلد email با متد extraFields() برگردانده می شود.
مرحله 4 - برای دریافت اطلاعات با این فیلد email، آدرس http://localhost:8080/users?expand=email را در مرورگر وب تان باز کنید.
شخصی سازی Actionها
کلاس yii\rest\ActiveController اکشن های زیر را مهیا می کند:
Index - منابع را صفحه به صفحه لیست می کند.
View - جزئیات مربوط به یک منبع مشخص را نشان می دهد.
Create - یک منبع جدید ایجاد می کند.
Update - منابع موجود را به روز رسانی می کند.
Delete - منبع مشخص شده ای را حذف می کند.
Options - متد های HTTP پشتیبانی شده را باز می گرداند.
برای غیر فعال کردن action های “delete” و “create” ، کنترلر UserController را به شکل زیر تغییر دهید.
<?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;
}
}
?>
مدیریت خطاها (Handling Errors)
هنگام دریافت یک درخواست RESTful API، اگر error ی در درخواست وجود داشته باشد یا چیزی غیرمنتظره بر روی سرور اتفاق بیفتد، شما می توانید به سادگی یک exception یا استثنا را پرتاب یا اصطلاحاً throw می کنید. اگر می خواهید علت خطا را شناسایی کنید، باید یک استثنا همراه با یک کد وضعیتِ HTTP مناسب پرتاب کنید. Yii REST از وضعیت های (status) زیر استفاده می کند :
200 - ok
201 - یک منبع در پاسخ به یک درخواست POST با موفقیت ایجاد شد. header حاوی URLی هست که اشاره به منبع تازه ایجاد شده می کند
204 - request با موفقیت انجام شد ولی پاسخ شامل هیچ محتوایی نیست
304 - منبع اصلاح نشده است
400 - request بد
401 – احراز هویت یا Authentication ناموفق بوده است
403 - کاربر تأیید شده مجاز به دسترسی به API endpoint نیست
404 - منابع وجود ندارند
405 - اجازه استفاده از متد وجود ندارد
415 - media type استفاده شده، پشتیبانی نشده است
422 - اعتبار سنجی (validation) داده موفقیت آمیز نبوده است
429 - request های بیش از حد
500 - خطای سرور داخلی
این فصل در یک نگاه:
…
سلام . پیشنهاد میکنم حتما دموی دوره رو مشاهده کنید درباره فریم ورک Yii: در پاسخ به سوالات : آیا این فریم ورک سریع است؟ آیا این یک فریم ورک امن است؟ آیا این یک فریم ورک حرفه ای است؟ آیا ا…این فصل در یک نگاه:
…
پیشنهاد میکنیم دمو دوره رو حتما مشاهده کنید با سلام خدمت دوستان عزیز . ابتدا عرض کنم که این دوره برای دوستانی آماده شده که میخوان وب اپلیکیشن های مدرنی رو طراحی بکنن و وارد بازار کار ط…