CakePHP不确定它是否';这是对的

CakePHP不确定它是否';这是对的,php,cakephp,Php,Cakephp,我有一个控制器:转售,我在管理员控制器中,需要创建一个新的转售。。我该怎么做 第一种选择: 管理员表单调用/转售/添加转售 第二个选项:Administrator有一个addResale方法,用于加载转售模型并将其插入 我该怎么办? 谢谢管理员控制器不应该加载转售控制器-这应该是两个控制器都使用的模型。您应该将转售模型加载到控制器文件顶部的$uses=array()属性中的管理员控制器中: class AdministratorController extends AppController {

我有一个控制器:转售,我在管理员控制器中,需要创建一个新的转售。。我该怎么做

第一种选择: 管理员表单调用/转售/添加转售

第二个选项:Administrator有一个addResale方法,用于加载转售模型并将其插入

我该怎么办?
谢谢

管理员
控制器不应该加载
转售
控制器-这应该是两个控制器都使用的模型。您应该将
转售
模型加载到控制器文件顶部的
$uses=array()
属性中的
管理员
控制器中:

class AdministratorController extends AppController {
    var $uses = array('Resale', //the rest of your models);

    public function createResale() {
        $this->Resale->create();
        $this->Resale->set($this->data['Resale']);
        $this->Resale->save();
    }

}
其他选项是,您可以使用Ajax为您发布请求,也可以在管理员控制器中使用
$this->requestAction()
在转售控制器中使用处理功能:

// administrator controller
public function createResale() {
    // define your data here
    $result = $this->requestAction('resales/create', array($data_array));
}
class AdministratorController extends AppController {
    var $helpers = array('Session', // any others here);
有关请求操作的更多信息,请参阅手册:

编辑

您刚刚询问了有关视图的问题。在这种情况下,实际上不需要为
createResale()
创建视图,您可能需要做的是设置一个,然后重定向回表单。您需要确保已将会话帮助程序包含在控制器的顶部:

// administrator controller
public function createResale() {
    // define your data here
    $result = $this->requestAction('resales/create', array($data_array));
}
class AdministratorController extends AppController {
    var $helpers = array('Session', // any others here);
然后,您可以阻止视图的布局和渲染,执行您的操作,并使用结果消息设置会话闪存:

public function createResale() {
    // don't render a view or layout
    $this->layout = '';
    $this->render(false);

    // process your request
    $result = // do stuff... return true or false for result

    $msg = $result ? 'Added successfully!' : 'Error adding resale!';
    // set flash message
    $this->Session->setFlash($msg);
    // return to that form
    $this->redirect(array('action' => 'formYouCameFrom'));
}
现在在表单上,您只需执行以下操作:

echo $this->Session->flash();

。。。这将输出结果。

如果我正确地阅读了您的问题,我将使用选项1,假设“管理员表单”是指表单视图本身。它更具描述性和宁静。另外,控制器不应该与其他控制器一起工作,它们应该彼此不可知。关于我的管理员表单操作,请类似/resales/create?它应该是
/Administrator/createResale
-您可以发布到
resales
表单,但是,在多种情况下,您必须处理重定向,使其退出。好的,我的管理员控制器需要有一个视图,对吗?因此,我创建了一个方法,该方法将显示带有表单的视图。。然后我为帖子创建了另一个方法。。我说的对吗?我想你错了因为我有这个/administrators/formforcreateanewersale。。然后,我需要管理员控制器中的formForCreateANewResale操作。。是吗?正确,窗体的操作和呈现窗体的视图。您也可以使用与上面相同的操作并使用
if(isset($this->data))
来确定是处理表单的数据还是只显示表单。也许是时候阅读CakePHP教程了。