Cakephp 3.1コントローラー関数からjsonを返そうとしています。私の問題は、_serialize フラグを使用して何をしても、ビュー テンプレート ファイルが見つからないという応答が常に返されることです。
Cake のドキュメントでは、テンプレートを使用して応答をフォーマットする必要がない場合は、_serialize フラグを設定するように指示されています。View _serializeのCake Docs
以下は、プロセスを初期化するクライアント側の Javascript です。
function save_activity( mod, act, resp ) {
$.ajax({
method: 'POST',
url: '/activities/saveActivity',
data: {
'module' : "example1",
'activity_name' : "example2",
'response' : "example3"
},
dataType: 'json',
error: function( xhr, status, error ){
alert( status + error );
},
success: function( data, status, xhr ){
alert( status + data.success );
}
});
}
クライアントからの json を処理するコントローラー コード。
public function saveActivity()
{
$user = $this->Auth->user();
//This line does not seem to do anything
//$this->request->input('json_decode', 'true');
//Debugger::log($this->request->data);
$activityTable = TableRegistry::get('Activities');
$activity = $activityTable->newEntity();
$activity->user_id = $user['id'];
$activity->module = $this->request->data('module');
$activity->activity_name = $this->request->data('activity_name');
$activity->response = $this->request->data('response');
//These lines do not have any effect
//$this->RequestHandler->renderAs($this, 'json');
//$this->response->type('application/json');
//$this->viewBuilder()->layout(null);
//$this->render(false);
$msg = '';
if ($activityTable->save($activity)) {
$msg = 'Activity Stored';
} else {
$msg = 'Activity Not Stored';
}
$this->set(['response' => $msg]);
//comment or uncomment this line and it makes no difference
//as it still returns a json response about a missing template.
$this->set('_serialize', true);
}
_serialize フラグを含めたり削除したりすると表示されるエラー メッセージ。
「テンプレート ファイル "Pages\json\module1\activity4.ctp" が見つかりません。」
誰でもこのメカニズムについて洞察を持っていますか? 私が見つけた回避策は、テンプレート ファイルを含めることですが、これは、この呼び出しが生成されるすべての場所を処理するために、本質的に空のテンプレート ファイルを数十個生成する必要があることを意味します。
何か助けてください。