我呼籲在這一個集體的智慧。我有以下非常奇怪的錯誤。Intermitent Naming Conflict
我有一個名爲File.php的模型。我在我的應用程序的幾個地方使用過它。但現在它似乎並沒有工作。
在這種情況下,它的作品在我的template.php:
$this->Behaviors->load('Containable');
$this->contain(
array(
'User',
'TemplatesUserType' => array(
'UserType',
'FilesTemplatesUserType'=>array('File')
)
)
);
$template=$this->find('first',array('conditions'=>array('Template.id'=>$template_id,"Template.user_id"=>$user['User']['id'])));
這也適用於FilesTemplatesUserTypesController:
$this->FilesTemplatesUserType->File->recursive=-1;
$file=$this->FilesTemplatesUserType->File->findByName($name);
if(gettype($file)=="array" && count($file)>0){
$file_id=$file["File"]["id"];
}
else{
$this->FilesTemplatesUserType->File->create();
$this->FilesTemplatesUserType->File->save(array("File"=>array("name"=>$name)));
$file_id=$this->FilesTemplatesUserType->File->getInsertID();
}
$this->request->data["FilesTemplatesUserType"]["file_id"]=$file_id;
}
$this->FilesTemplatesUserType->create();
$this->FilesTemplatesUserType->save($this->request->data);
兩個案件工作,完全正常。但現在,從模型Document.php,失敗拋出一個500內部服務器錯誤:
$this->Behaviors->load("Containable");
$this->contain(array(
"UsersVersion"=>array(
"conditions"=>array("UsersVersion.user_id !="=>$user["User"]["id"]),
"User"
),
"Draft"=>array(
"fields"=>array("Draft.id,Draft.template_id,Draft.name"),
"Template"=>array(
"fields"=>array("Template.id, Template.name, Template.user_id"),
"TemplatesUserType"=>array(
"DraftsUser"=>array(
"User"
),
"FilesTemplatesUserType"=>array("FilesUsersVersion","File")
)
)
)
)
);
$draft=$this->findById($document_id);
但是,直到我刪除的作品「文件」。在CORE/Utility/File.php
$model=$this->Draft->Template->TemplatesUserType->FilesTemplatesUserType->File;
$model->recursive=-1;
$file=$model->findByName("Ident");
它拋出在行88錯誤,指示$路徑有:
要調試,我想這在同一個文件array("class"=>"File","alias"=>"File")
而不是string
和以下錯誤消息:Fatal error: Call to undefined method File::findByName() in C:\Inetpub\vhosts\*******.com\httpsdocs\eolas\app\Controller\DocumentsController.php on line 245
使事情更混亂,這個工程從我的template.php型號:
$model=$this->TemplatesUserType->FilesTemplatesUserType->File;
$model->recursive=-1;
$file=$model->findByName("Ident");
它似乎以某種方式發生錯誤,具體取決於正在調用模型File的遞歸級別,並且可能與File.php Utility類發生衝突。
我的問題是:爲什麼它在某些地方完美地工作,直到現在失敗? CakePHP的內部工作是否有一些機會,我現在正在失去它?
我希望你能引導我走向正確的方向(而不必改變我的模型名稱,= P)。
非常感謝您提前!
您好!我懷疑File類名稱衝突,但是由於它直到現在一直在我的應用程序中完美運行,所以我完全迷惑爲什麼有時候會有不同的表現,讓我試圖找到解決方法。我嘗試了你的解決方案,並像魅力一樣工作!這提高了我對CakePHP內部工作的理解,併爲我節省了大約一個小時的重新調整工作。非常感謝!!! –