使用cakephp输出标签?

时间:2013-03-12 19:39:49

标签: php cakephp

我在Windows XP中使用xampp在本地开发了一个带有cakephp的Web应用程序,一切正常。今天我把它部署到了CentOS和Ubuntu服务器上,两者都有问题。 发生的事情是Tab空间与我的信息一起被输出。假设我做了一个应该返回OK的ajax调用,返回的是" OK",更确切地说是(0x09)OK

我真的不知道这个标签的来源。 我已将代码减少到最大值,但仍然可以得到它。

控制器

public function sendcomment() {
        $this->layout = 'ajax';
        $this->set('ret', 'OK');
    }

查看

<?php echo $ret; ?>

即使我没有直接在布局上使用视图文件和输出信息,选项卡仍然存在:

控制器

public function sendcomment() {
        $this->layout = 'testlayout';
    }

testlayout.ctp

OK

无论布局如何,所有操作都会发生这种情况。

是否有人经历过此事并知道可能发生的事情? 我的所有文件都是用UTF-8编码的,没有BOM,它们在Windows上运行得非常好。

- 编辑:

好吧,有人说这是配置问题,我真的不知道。 然而,试图找到来自“标签”的位置,我开始在核心文件上放置回声并前进和前进,直到我最终到达标签所在的位置。 从cake webroot的index.php开始,如果我在echo 'a'方法之前放置dispatch(),我的输出为a(0x09)OK。因此,标签确实来自蛋糕。

现在问题就在这里,看看我最终遇到的几次测试的结果,这让我一无所获。

现在我正在(CakeRoot)/lib/Cake/Routing/Dispatcher.php。这里我们有以下方法:

protected function _loadController($request) {
    $pluginName = $pluginPath = $controller = null;
    if (!empty($request->params['plugin'])) {
        $pluginName = $controller = Inflector::camelize($request->params['plugin']);
        $pluginPath = $pluginName . '.';
    }
    if (!empty($request->params['controller'])) {
        $controller = Inflector::camelize($request->params['controller']);
    }
    if ($pluginPath . $controller) {
        $class = $controller . 'Controller';
        App::uses('AppController', 'Controller');
        App::uses($pluginName . 'AppController', $pluginPath . 'Controller');
        App::uses($class, $pluginPath . 'Controller');
        if (class_exists($class)) {
            return $class;
        }
    }
    return false;
}

我正是在这一部分:

    App::uses($class, $pluginPath . 'Controller');
    if (class_exists($class)) {
        return $class;
    }

现在这里是测试,如果我在if之前放置一个echo,就像这样:

    App::uses($class, $pluginPath . 'Controller');
    echo 'a';
    if (class_exists($class)) {
        return $class;
    }

我的输出将为a(0x09)OK。 但是,如果我把我的回声放在if如下:

    App::uses($class, $pluginPath . 'Controller');
    if (class_exists($class)) {
        echo 'a';
        return $class;
    }

我的输出将是(0x09)aOK。 我唯一想到的是class_exists()回应了标签。但这没有任何意义。 出于测试目的,我做了这个:

    App::uses($class, $pluginPath . 'Controller');
    if (TRUE) {
        return $class;
    }

该标签仍在输出。更糟糕的是,如果我这样做if == TRUE,无论回声“a”是否在if之前或之前,输出总是a(0x09)OK

这里发生了什么?

1 个答案:

答案 0 :(得分:1)

  

所以标签确实来自蛋糕。

这是一个错误的结论。

你几乎拥有它

解释你的代码:

App::uses($class, $pluginPath . 'Controller');
echo "before";
if (class_exists($class)) {
    echo 'after';
    return $class;
}

输出:before(0x09)after

这里没有什么大不了的。以这种方式使用,class_exists将自动加载类 - 即包含它们,以及任何直接的类依赖项(因为它们也将调用类加载)。因此,它可以来自一个非常短的地方列表:

  • 控制器/ $class Controller.php这样的
  • 插件/ Foo / Controller / FooAppController.php(如果它是插件控制器)
  • Controller / AppController.php(如果存在)

其中一个文件有前导空格或尾随空格 - 只需查找并删除即可。

使用您可以使用的工具

您不需要猜测问题是什么文件,有很多工具可以告诉您哪个文件是罪魁祸首。一个这样的工具在debug kit plugin中,例如:

-> Console/cake DebugKit.whitespace

Welcome to CakePHP v2.3.0-RC2 Console
---------------------------------------------------------------
App : app
Path: /path/to/app/
---------------------------------------------------------------
Checking *.php in /path/to/app/
!!!contains trailing whitespaces: /app/Controller/AppController.php