我有一个名为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)
答案 0 :(得分:1)
Form->create()期望模型名称作为它的第一个参数。因此,如果您不想使用模型,可以尝试将null
或false
传递给模型参数,例如:
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的表(也按照惯例)