0

我正在使用 Laravel 的 Eloquent,大多数时候没有任何问题。但现在我遇到了一个问题,似乎无法解决它。谷歌没有提供解决方案......

$global_data['credentials']     = Company::find(Auth::user()->company_id)->credentials()->first();

View::share('data', $global_data);

公司模型中的关系:

public function credentials(){
  return $this->has_one('credentials');
}

凭据将“c”回显到每一页。“c”在文档类型之前输出。当我删除凭据行时,“c”消失了。

页面来源:

c<!DOCTYPE html>
<html lang="nl">
<head>

任何人?

4

1 回答 1

1

老实说,我怀疑 Eloquent 是否与此有关,但可能是您代码中某处的不幸的“c”。这种情况经常发生,解决方案是一只讨厌的老鼠追逐(在这种情况下是“c”)。

造成这种情况的一个可能原因是文件以 开头c<?php或结尾?>c,通常是通过 Autoloader 加载的文件(模型、库和捆绑包)。

我敢打赌它在您的凭据模型文件的开头,但也可能在其他地方。如果它不在 Credential.php 中,找到它的一种可能方法是逐步添加与构建该$global_data['credentials'] = ....行有关的任何内容。

  1. 尝试硬编码的凭证,如果没有出现“c”,它可能来自公司或身份验证文件。
  2. 然后尝试做一个 Company::find($1)->credentials(),如果没有“c”出现,它可能在你的 Auth 或 User 上(它包含在 Auth 中)。
  3. 继续这样做,直到找到它。

编辑:

发生这种情况是因为当 Autoloader 包含一个文件时,PHP 会像在旧样式 PHP 上那样解析它,或者我应该说,就像任何视图一样。

如果您的文件以非空行或它们之前或之后的字符开头<?php和结尾?>,则在 Laravel 的视图渲染之前不会输出任何内容。但是,如果这些文件中的任何一个有输出,它就会进入 PHP 的输出缓冲区并在您的视图之前呈现。

<?php始终在第一行使用打开那些非输出文件并且从不使用?>.

于 2013-03-06T19:45:41.417 回答