继承了一个旧的CakePHP网站,我试图找出一些函数的功能。我有几个函数与另一个函数具有相同的名称,但首先使用下划线,例如save()
和_save()
。但是,函数_save()
永远不会在任何上下文中调用,但save()
是。
我读过this question,看起来它来自一个旧的最差练习练习,但这并没有真正解释为什么它在我的代码中;您还需要将function _save()
称为_save()
吗?如果没有拨打_save()
,是否可以安全删除?
我希望它消失,即使save()
函数不应该存在,重写完美的框架功能。它看起来像是同一个函数的旧版本,但没有注释,我不知道是否有一些奇怪的上下文,其中php / Cake将回退到强调的函数名。
这是好奇的代码。仔细观察后,看起来强调的功能是由于某种原因留下的功能的旧版本。至少有一个是被调用的“私有”方法(来自同名的公共函数,减去下划线......):
function __save() {
$user = $this->redirectWithoutPermission('product.manage','/',true);
if ($this->data) {
$this->Prod->data = $this->data;
$saved_okay = false;
if ($this->Prod->validates()) {
if ($this->Prod->save()) $saved_okay = true;
}
if ($saved_okay) {
$product_id = ($this->data['Prod']['id']) ? $this->data['Prod']['id'] : $this->Prod->getLastInsertId();
if ($this->data['Plant']['id']) {
$this->data['Prod']['id'] = $product_id;
$this->Prod->data = $this->data;
$this->Prod->save_plants();
$this->redirect('/plant/products/'.$this->data['Plant']['id']);
} else {
$this->redirect('/product/view/'.$product_id);
}
die();
} else {
die('did not save properly');
}
} else {
die('whoops');
}
}
function save() {
$user = $this->redirectWithoutPermission('product.manage','/products',true);
if ($this->data) {
$this->Prod->data = $this->data;
if ($this->Prod->validates()) {
$this->Prod->save();
$gotoURL = isset($this->data['Navigation']['goto'])?$this->data['Navigation']['goto']:'/';
$gotoURL = str_replace('%%Prod.id%%', $this->data['Prod']['id'], $gotoURL);
if (isset($this->data['Navigation']['flash'])) {
$this->Session->setFlash($this->data['Navigation']['flash']);
}
if (isset($this->params['url']['ext']) && $this->params['url']['ext']=='ajax') {
$value = array(
'success'=>true
,'redirect'=>$gotoURL
);
print $this->Json->encode($value);
} else {
$this->redirect($gotoURL);
}
} else {
$value = array(
'success'=>false
,'message'=>"You have invalid fields."
,'reason'=>'invalid_fields'
,'fields'=>array(
'Prod'=>$this->Prod->invalidFields()
)
);
print $this->Json->encode($value);
}
} else {
$this->redirect('/products');
}
die();
}
答案 0 :(得分:1)
我曾希望了解一些惯例是否适用于这种情况,但是从测试中我发现函数是而不是,这实际上是我问的问题的答案。