在Cake()

时间:2015-07-24 08:12:39

标签: php cakephp

简要说明

我在XAMP上本地工作。 CakePHP版本:2.6.3。

我有一个名为Brand的模特。品牌有idnameenabled字段。

此项目有很多权限级别,我们只需要两个: Admin Superadmin

  • 管理员:可以到处做CRUD。无法看到已删除的元素
  • Superadmin:到处都可以做CRUD。可以看到已删除的元素

在此项目中 没有删除任何内容 ,这就是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 根本不是解决方案。

1 个答案:

答案 0 :(得分:3)

我已经剪断了与您的问题无关的代码:

public function restore( $brand_id )
{
    $this->restore($brand_id);
}

BrandController还原方法正在调用自身。您需要更改此项以调用相应的还原方法。