我是 stackoverflow 的新手,我刚刚开始玩 CakePHP 3。
我遇到了一个奇怪的问题:
我正在向控制器发送一个 ajax 请求(表单提交),我希望得到一个正确的 json 响应。当我在 config/app.php 中将调试模式设置为 false 时,它工作正常,但是当它设置为 true 时,我在浏览器控制台中收到一条错误消息,并且响应文本似乎是 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