我是stackoverflow的新手,我刚开始玩CakePHP 3。
我遇到了一个奇怪的问题:
我正在向控制器发送一个ajax请求(表单提交),我期望得到一个正确的json响应。它在config / app.php中将调试模式设置为false时工作正常,但是当它设置为true时,我在浏览器控制台中收到错误消息,而responsetext似乎是html。我在url中调用了.json扩展名的操作。
我已将控制台的屏幕截图链接到第一个响应,其中调试模式设置为false,第二个设置为true:
我在config / routes.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版本:3.3.2
答案 0 :(得分:0)
<?php
use Cake\Core\Configure;
// your class ,...
public function getUserStats() {
$this->log($users, 'debug');
Configure::write('debug',false); // DISABLE
$this->set('users', $users);
$this->set('_serialize', ['users']);
}
答案 1 :(得分:0)
查看屏幕截图中可见的输出位
<div class="cake-debug-output"> ...
HTML是由debug()
函数生成的输出。
仔细查看您的型号代码,您应该发现对该功能的调用。删除它,你应该是好的。
顺便说一下,调用的来源可以在<span>
的第一个<div>
元素中找到,所以如果您将来遇到类似的问题,请务必检查一下。