yii2控制器
yii2控制器
Yii2 的控制器(Controller)是 MVC(Model-View-Controller)设计模式中的核心组件之一,负责处理用户请求并生成相应的响应。 控制器包含了处理请求所需的方法(通常称为动作方法或动作),并可以调用模型和视图来执行相应的业务逻辑和展示内容。
Yii2 控制器示例
<?php
namespace app\controllers;
use Yii;
use yii\web\Controller;
use app\models\MyModel;
class MyController extends Controller
{
// 声明公共动作
public function actionIndex()
{
// 获取模型数据
$model = new MyModel();
$data = $model->getData();
// 渲染视图并传递数据
return $this->render('index', [
'data' => $data,
]);
}
// 声明另一个公共动作
public function actionView($id)
{
// 根据ID获取模型数据
$model = MyModel::findOne($id);
if ($model === null) {
throw new \yii\web\NotFoundHttpException('The requested page does not exist.');
}
// 渲染视图并传递数据
return $this->render('view', [
'model' => $model,
]);
}
}
数据验证
if (Yii::$app->request->isPost) {
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
$model->save();
// 设置成功信息并跳转
Yii::$app->session->setFlash('success', 'User created successfully.');
return $this->redirect(['index']); // 假设有一个index动作用于显示用户列表
} else {
// 验证失败,显示错误信息
}
}
附加行为
<?php
namespace app\controllers;
use Yii;
use yii\web\Controller;
use app\components\MyControllerBehavior;
class MyController extends Controller
{
public function behaviors()
{
return [
'myBehavior' => [
'class' => MyControllerBehavior::class,
// 可以在这里设置行为的属性
// 'propertyName' => 'propertyValue',
],
];
}
public function actionIndex()
{
return $this->render('index');
}
// ... 其他动作方法 ...
}
行为类
<?php
namespace app\components;
use yii\base\Behavior;
use yii\base\ActionEvent;
class MyControllerBehavior extends Behavior
{
public function events()
{
return [
\yii\web\Controller::EVENT_BEFORE_ACTION => 'beforeAction',
\yii\web\Controller::EVENT_AFTER_ACTION => 'afterAction',
];
}
public function beforeAction($event)
{
// 在控制器动作执行之前执行的代码
\Yii::trace('Before action ' . $event->action->id . ' is executed.', 'my_behavior');
}
public function afterAction($event)
{
// 在控制器动作执行之后执行的代码
\Yii::trace('After action ' . $event->action->id . ' is executed.', 'my_behavior');
}
}