CakePHP不确定它是否是正确的

时间:2013-12-09 02:03:32

标签: php cakephp

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

第一个选项: 管理员表单调用/ resales / addResales

第二个选项:管理员有一个方法addResale,它加载Resale模型并插入它。

我该怎么办? 感谢

1 个答案:

答案 0 :(得分:2)

Administrator控制器不应加载Resales 控制器 - 这应该是两个控制器都使用的模型。您应该将Resales模型加载到控制器文件顶部Administrator属性中的$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()来使用Resales控制器中的处理功能:

// administrator controller
public function createResale() {
    // define your data here
    $result = $this->requestAction('resales/create', array($data_array));
}

有关requestAction的更多信息,请查看手册: http://book.cakephp.org/2.0/en/controllers.html

  

修改

您刚刚询问过观点。在这种情况下,没有必要为createResale()创建视图,而您可能想要做的是设置Session flash message,然后重定向回您的表单。您需要确保在控制器顶部包含了Session帮助程序:

class AdministratorController extends AppController {
    var $helpers = array('Session', // any others here);

然后你阻止了视图的布局和渲染,做你的事情并用结果消息设置会话flash:

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();

...将输出结果。