Php 在YII框架上创建一致控制器

Php 在YII框架上创建一致控制器,php,model-view-controller,yii,Php,Model View Controller,Yii,我将yii框架与action controller一起使用,控制器中的每个动作都会发出相同的请求,但会发生一些变化。 我正在使用我的控制器来调用API(我做的扩展)。 我想知道如何自动设置控制器以调用API,但使用适合此控制器的特定值和属性。 因此,我不需要将所有代码复制粘贴到所有控制器 我想知道如何对AccessControl筛选器执行相同的操作(将所有规则配置为一个类/函数和所有控制器组件) 例如: <?php public function actionLoadD

我将yii框架与action controller一起使用,控制器中的每个动作都会发出相同的请求,但会发生一些变化。 我正在使用我的控制器来调用API(我做的扩展)。 我想知道如何自动设置控制器以调用API,但使用适合此控制器的特定值和属性。 因此,我不需要将所有代码复制粘贴到所有控制器

我想知道如何对AccessControl筛选器执行相同的操作(将所有规则配置为一个类/函数和所有控制器组件)

例如:

      <?php
    public function actionLoadDataUser()
{


            //Set model
    $model = new User_DataForm;

    $function = "LoadDataUser";           //Set Method to set or get from (API)

            //Set model name
            $model_name = get_class($model);

    // collect user input data
    if(isset($_POST[$model_name]))
    {       

                    $model->attributes = $_POST[$model_name];
                                        $response = Yii::app()-API->SendRawData($function,  $model->attributes);    // server and get response by function and data
                switch ($response)
                {
        case 'OK':
            Yii::app()->user->setFlash('info','OK');
            $this->refresh();
        break;
        default: 
            Yii::app()->user->setFlash('info','Error!');
            $this->refresh();
                }
    }

    // display the page
    $this->render('index', array('model'=>$model));
}




    public function actionLoadDataAdmin()
{

            //Set model
    $model = new Admin_DataForm;

    $function = "LoadDataAdmin";           //Set Method to set or get from (API)

            //Set model name
            $model_name = get_class($model);

    // collect user input data
    if(isset($_POST[$model_name]))
    {       

                    $model->attributes = $_POST[$model_name];
                    $response = Yii::app()-API->SendRawData($function,  $model->attributes);    // server and get response by function and data
                switch ($response)
                {
        case 'OK':
            Yii::app()->user->setFlash('info','OK');
            $this->refresh();
        break;
                    case 'NOT_ADMIN':
            Yii::app()->user->setFlash('info','Access Denied');
            $this->refresh();
        break;
        default: 
            Yii::app()->user->setFlash('info','Error!');
            $this->refresh();
                }
    }

    // display the page
    $this->render('admin', array('model'=>$model));
}
    ?>

编辑:使用一个操作,根据传递给它的参数执行API调用

public function actionLoadData()
{
    $modelName = $_POST['model'];
    $model     = new $modelName;
    $function  = $_POST['function'];

    if(isset($_POST[$modelName]))
    {
        $model->attributes = $_POST[$modelName];
        $response = Yii::app()->API->SendRawData($function,  $model->attributes);
        switch ($response)
        {
            case 'OK':
                Yii::app()->user->setFlash('info', 'OK');
                $this->refresh();
                break;
            default: 
                Yii::app()->user->setFlash('info', 'Error!');
                $this->refresh();
        }
    }

    $this->render($_POST['view'], array('model' => $model));
}

请注意,此代码不安全。确保添加了一些验证

你能举一个你想要实现的例子吗?你到底想做什么?是访问控制吗?因此,只有分组在特定角色下的用户才能访问该特定操作?请尝试给出一个示例代码。如果你想用不同的请求访问同一个操作,你可以从请求中获得属性,并且可以跟随相同的操作。我认为问题在于$response(用户响应通知),因为我需要处理的每个函数都会给出相同的结果?很难准确地说出您想要的是什么,但是您可以一次对一系列操作应用一个过滤器。谢谢,但是,我有更多的控制器操作$response按函数部署,例如,如果函数是ActionLoadDataGuest:`case'OK':Yii::app()->ViewByRole(数组('role'=>guest');打破默认值:Yii::app()->ViewByRole->Error(数组('role'=>'guest')`正如我所说,我所有的行动都有细微的变化。我总共有80个动作发出相同的呼叫。如果我要说什么,我需要创建80个动作和另一个70-80个函数来调用我的更改。我明白了,这是糟糕的编码方式。我建议使用一个操作,并通过传递参数告诉它您需要什么。我将更新我的代码。这仍然不是我想要做的。1.我不能通过邮寄方式传递VAR,因为客户不能通过欺骗来提出自己的请求。2.我仍然需要复制粘贴每个动作,并将其更改为特定的功能。1。这就是为什么我说你应该验证外部数据。2.不,你没有。