アップロード コントローラーに関連して、ビューに次の jquery コードがあります。
function screenshot(){
var dataUrl = renderer.domElement.toDataURL("image/png");
$.post("picturepicker", {dataUrl: dataUrl, uploadnumber: 2
}
}
この関数にデータを正常に送信します。
public function picturepicker(){
...
if($this->request->is('post')){
define('UPLOAD_DIR', WWW_ROOT . 'img/'); // increase validation
$img = $_POST['dataUrl']; // Tried $this->request['dataURL'], retrieved 'dataURL' just fine
$upload = $_POST['uploadnumber']; // tried $this->request['uploadnumber'], did not retrieve 'uploadnumber'
$img = str_replace('data:image/png;base64,', '', $img);
$img = str_replace(' ', '+', $img);
$data = base64_decode($img);
$file = UPLOAD_DIR . $upload . '.png'; // UPLOAD_DIR . uniqid() . '.png';
$success = file_put_contents($file, $data);
print $success ? $file : 'Unable to save the file.';
JavaScriptを実行するたびに新しいデータベース行が作成されることを除いて、これは正常に機能します。私は create 関数を持っていないので、どういうわけか jquery がこの関数をうっかり呼び出しているのではないかと想像します。
public function upload(){
if ($this->request->is('post')) {
//var_dump($this->request->data);
$this->Upload->create();
....
ただし、作成関数へのすべての参照を削除しても行が追加されているため、疑問があります。
では、なぜこのようなことが起こるのでしょうか? どうすれば修正できますか? どういうわけかjqueryコードがすべての関数を呼び出しており、投稿データを受け取る他の関数の周りにifブロックを配置する必要があるのではないかと疑っています. これはあってはならないことであり、おそらくケーキのルーティングが原因であると言われました。または、ケーキのドキュメントで何かを見逃している可能性があります-おそらくケーキは、すべてのポストリクエストに対して新しいDB行を作成するように設定されており、何とかしないように指示する必要があります.