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');  
    }  
}
posted @ 2024-03-30 11:09  胡勇健  阅读(10)  评论(0编辑  收藏  举报