Cakephp - HTML表单 - >为没有模型的控制器创建 - 导致错误

时间:2014-04-16 13:29:26

标签: php forms cakephp

我有一个名为MCPController的控制器。 我知道这似乎与Cakephp命名约定相反,但是

1)名称" MCPs"与's'没有语法意义。所以我把它留作了#34;奇异的" ..

2)我实际上没有/需要一个名为MCP的数据库表

这个MCPController有一个动作" dayview"它调用了一个名为dayview的视图。

在我的日视图中,我有以下代码创建表单:

echo $this->Form->create('MCP', array('formnovalidate' => true, 'controller'=>'MCP', 'action'=>'merchantonchange'));
echo $this->Form->input('MerchantAssignments', array('label' => 'Merchant Assignments',
                                                    'type' => 'select',
                                                    'options'=>$this->Session->read('Auth.MerchantAssignments'),
                                                    'default' => $this->Session->read('Auth.ActiveMerchant'),
                                                    'onChange' => 'this.form.submit()'));
echo $this->Form->end();

我收到错误:

Error: Table m_c_ps for model MCP was not found in datasource default.

该错误似乎来自" $ this-> Form-> create"代码,因为取走Form-> create似乎把错误带走了。

似乎期望数据库中存在表m_c_ps?

表单旨在将新的下拉列表选择(通过onchange事件)提交回同一个Controller。

我怎么能解决这个问题,因为我实际上没有一个名为m_c_ps的表?

堆栈跟踪:

CORE\Cake\Model\Model.php line 3498 → Model->setSource(string)
CORE\Cake\Model\Model.php line 1355 → Model->getDataSource()
CORE\Cake\View\Helper\FormHelper.php line 207 → Model->schema()
CORE\Cake\View\Helper\FormHelper.php line 459 → FormHelper->_introspectModel(string, string)
APP\View\Layouts\default.ctp line 191 → FormHelper->create(string, array)
CORE\Cake\View\View.php line 935 → include(string)
CORE\Cake\View\View.php line 897 → View->_evaluate(string, array)
CORE\Cake\View\View.php line 529 → View->_render(string)
CORE\Cake\View\View.php line 474 → View->renderLayout(string, string)
CORE\Cake\Controller\Controller.php line 952 → View->render(null, null)
CORE\Cake\Routing\Dispatcher.php line 192 → Controller->render()
CORE\Cake\Routing\Dispatcher.php line 160 → Dispatcher->_invoke(MCPController, CakeRequest, CakeResponse)
APP\webroot\index.php line 108 → Dispatcher->dispatch(CakeRequest, CakeResponse)

2 个答案:

答案 0 :(得分:1)

Form->create()期望模型名称作为它的第一个参数。因此,如果您不想使用模型,可以尝试将nullfalse传递给模型参数,例如:

echo $this->Form->create(null, array('formnovalidate' => true, 'controller'=>'MCP', 'action'=>'merchantonchange'));

echo $this->Form->create(false, array('formnovalidate' => true, 'controller'=>'MCP', 'action'=>'merchantonchange'));

答案 1 :(得分:1)

好吧,当你摆脱蛋糕约定时,你会遇到各种各样的麻烦;)但是有帮助。

在您的控制器中,您需要定义您未使用具有Controller :: $ uses属性的模型。在具有类属性声明的地方将其定义为空

public $uses = array();

然后蛋糕会知道不要寻找模型。如果你没有指定这个,那么Cake默认启动并尝试创建一个默认的'模型称为MCP和(每个蛋糕约定)和ergo查找一个名为m_c_ps的表(也按照惯例)