0

我是 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

4

2 回答 2

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']);
}
于 2016-08-26T13:41:56.467 回答
0

查看屏幕截图中可见的输出位

<div class="cake-debug-output"> ...

该 HTML 是debug()函数生成的输出。

仔细查看您的模型代码,您应该会发现对该函数的调用。删除它,你应该很好。

顺便说一句,调用的来源可以在 中的第一个<span>元素中找到<div>,因此如果您以后遇到类似的问题,请务必检查一下。

于 2016-08-26T14:58:25.307 回答