我在XAMP上本地工作。 CakePHP版本:2.6.3。
我有一个名为Brand
的模特。品牌有id
,name
和enabled
字段。
此项目有很多权限级别,我们只需要两个: Admin 和 Superadmin 。
在此项目中 没有删除任何内容 ,这就是enabled
字段存在的原因。
Cake为save()
或delete()
记录提供快速方法,所以我决定创建一个方便的方法,我可以在任何模型中使用禁用元素和{{1元素。我已将其称为restore
和还原,我已将它们放入我的disable
AppController.php
我的目标是在我将来为方便起见而创建的任何模型中使用这些方法。
以下代码是protected function disable($id)
{
return $this->{$this->modelClass}->save(array('id' => $id, 'enabled' => 0));
}
protected function restore($id)
{
return $this->{$this->modelClass}->save(array('id' => $id, 'enabled' => 1));
}
delete
操作
BrandController
此处public function delete( $brand_id )
{
if( $this->disable($brand_id) )
{
$this->flash('Brand deleted successfully', DS . $this->Session->read('locale') . DS . 'brand' . DS . 'index', 2);
}
else
{
$this->flash('An error occured', DS . $this->Session->read('locale') . DS . 'brand' . DS . 'index', 2);
}
}
restore
行动
BrandController
如果我使用public function restore( $brand_id )
{
if( $this->restore($brand_id) )
{
$this->flash('Brand restored successfully', DS . $this->Session->read('locale') . DS . 'brand' . DS . 'index', 2);
}
else
{
$this->flash('An error occured.', DS . $this->Session->read('locale') . DS . 'brand' . DS . 'index', 2);
}
}
没有问题,如果我使用if ($this->disable($brand_id)) ...
我得到无限加载和此错误
if ($this->restore($brand_id)) ...
但是...有趣的是我用Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 130968 bytes) in /lib/Cake/Model/Datasource/DboSource.php on line 803
方法中的代码替换if ($this->restore($brand_id))
(成为restore
我没有得到任何错误 < / p>
为什么会这样?这两种方法完全相同。
我不想将if ($this->Brand->save(array('id' => $brand_id, 'enabled' => 1)))
设置为memory_limit
根本不是解决方案。
答案 0 :(得分:3)
我已经剪断了与您的问题无关的代码:
public function restore( $brand_id )
{
$this->restore($brand_id);
}
BrandController
还原方法正在调用自身。您需要更改此项以调用相应的还原方法。