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