class Customer extends \yii\db\ActiveRecord
{
// Scenarios
const SCENARIO_NOTES_UPDATE = 'notes_update';
//...
/**
* @inheritdoc
*/
public function rules()
{
return [
//...
// notes is required in "notes_update" scenario
[['id', 'notes'], 'required', 'on' => self::SCENARIO_NOTES_UPDATE], // list all fields required in scenario
];
}
public function scenarios()
{
$scenarios = parent::scenarios();
$scenarios[self::SCENARIO_NOTES_UPDATE] = ['notes']; // required fields for this scenario
return $scenarios;
}
}
Create a model using a specific scenario:
class CustomerController extends Controller
{
//...
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'rules' => [
[
'actions' => [
//...
'update-notes',
],
'allow' => true,
'roles' => ['@'], // @ = Authenticated users
],
],
],
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'delete' => ['POST'],
],
],
];
}
public function actionUpdateNotes($id)
{
$model = $this->findModel($id);
$model->scenario = Customer::SCENARIO_NOTES_UPDATE;
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->id, 'tab'=>'notes']);
} else {
return $this->render('update-notes', [
'model' => $model,
]);
}
}
}
Create a view that uses the scenario:
title = Yii::t('app', 'Update Customer Notes') . ': ' . $model->account_number. ' ' . $model->company_name;
$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Customers'), 'url' => ['index']];
$this->params['breadcrumbs'][] = ['label' => $model->account_number, 'url' => ['view', 'id' => $model->id]];
$this->params['breadcrumbs'][] = Yii::t('app', 'Update Notes');
?>
= Html::encode($this->title) ?>
= $form->field($model, 'notes')->textarea(['rows' => 20]) ?>
= Html::submitButton($model->isNewRecord ?
Yii::t('app', 'Create') :
Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary'])
?>
= (!$model->isNewRecord ? Html::a(Yii::t('app', 'Cancel'), ['view', 'id' => $model->id, 'tab'=>'notes'], ['class' => 'btn btn-default']) : '') ?>
== References ==
* [[http://www.bsourcecode.com/yiiframework2/yii2-0-scenarios/|Yii 2.0 Scenarios]]
* [[http://www.yiiframework.com/doc-2.0/guide-structure-models.html#scenarios|Yii 2.0 Guide: Scenarios]]