我有这个控制器:转售,我在管理员控制器中,需要创建一个新的转售..我应该怎么做?
第一个选项: 管理员表单调用/ resales / addResales
第二个选项:管理员有一个方法addResale,它加载Resale模型并插入它。
我该怎么办? 感谢
答案 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();
...将输出结果。