私はStackOverflowのために新たなんだ、と私はちょうどCakePHPによる周りにプレイし始めました。3.CakePHPの3 - 適切なJSONを返すことができないとき、デバッグモード=真
私は奇妙な問題に遭遇しました:
私はコントローラにajax-request(form submit)を送信しています。私は適切なjson-responseを返すことを期待しています。 config/app.phpでデバッグモードをfalseに設定するとうまく動作しますが、trueに設定されていると、ブラウザのコンソールにエラーメッセージが表示され、responsetextがhtmlに見えます。私は、urlの.json拡張子でアクションを呼び出しています。
私がtrueに最初の応答がfalseに設定され、デバッグモードであり、コンソール、および第二セットのスクリーンショットをリンクした:私は設定/ルートに拡張を有効にしている
。 PHP:
Router::scope('/', function (RouteBuilder $routes) {
$routes->extensions(['json', 'xml']);
(...)
はここで、コントローラコードです:
public function getUserStats() {
$this->log($this->request->data, 'debug');
if (($this->request->is('post'))) {
$this->log('getCategories(): Post-request is received.', 'info');
$usersTable = TableRegistry::get('Users');
$q = $usersTable->find('statsByUsers', $this->request->data);
$users = $q->all();
// Calculating total amount per user.
foreach ($users as $u) {
foreach ($u->purchases as $p) {
$u->total += $p->total;
}
}
$this->log($users, 'debug');
$this->set('users', $users);
$this->set('_serialize', ['users']);
}
}
ここ
は、モデルのコードです:
public function findStatsByUsers(Query $query, array $options) {
debug($options);
$options['dates'] = $this->getConvertedDates($options);
$query
->contain([
'Purchases' => function($q) use($options) {
return $q
->select(['id', 'total' => 'amount * count', 'purchase_date', 'user_id'])
->where(['purchase_date BETWEEN :fromDate AND :toDate',])
->bind(':fromDate', $options['dates']['fromDate'], 'datetime') // Binds the dates to the variables in where-conditions
->bind(':toDate', $options['dates']['toDate'], 'datetime');
}
])
->where([
'Users.id IN ' => $options['users'],
'Users.active' => true
]);
return $query;
}
私はあなたが私がこれを解決するのに役立つことができるように、私はあなたに十分な情報を与えてくれた願っています。
CakePHPのバージョン:HTMLは、debug()
関数によって生成され出力されるスクリーンショット
<div class="cake-debug-output"> ...
に見える出力のビットをみる3.3.2
詳細を編集してください。コード専用と「試してください」の回答は、検索可能なコンテンツが含まれていないため、推奨されません。なぜ誰かが「これを試してみる」べき理由を説明しません。私たちはここで知識のためのリソースとなるよう努力しています。 –