【问题标题】:Illuminate Class editing doesn't take effect照亮类编辑不生效
【发布时间】:2014-06-22 09:45:16
【问题描述】:

我的代码遇到问题,我认为更简单的解决方案似乎是编辑 Laravel 框架的 Illuminate 类。

所以我打开了我想要编辑的文件 (public/laravel/framework/src/Illuminate/Http/Response.php) 并添加了一个方法 headers 来返回所有响应头:

public function headers()
{
    return $this->headers;
}

但是,这个编辑似乎没有被应用,因为当我想使用时:

Route::filter('cache.put', function($route, $request, $response){
    $headers = $response->headers();
});

Call to undefined method 错误被抛出。

我的问题是:如何编辑 Laravel 类?

【问题讨论】:

  • 你以静态方式调用方法(::)
  • 事实上,没有。我在后过滤器中使用$response->headers()。我编辑了我的问题。
  • 附带说明,您似乎是通过克隆框架项目来使用 Laravel。在这里查看答案以获得更好的方法:stackoverflow.com/questions/21613136/…

标签: php laravel laravel-4


【解决方案1】:

您不应该直接编辑属于 Laravel 框架的代码。稍后您将无法更新框架。即使你设法让它按照你尝试的方式工作,它也有可能破坏你的整个项目,因为 Laravel 仍然会使用它自己的 Response 类,而你尝试使用你自己的。

您需要在此处查看有关 Facades 的文档以使用 Laravel 方式进行操作:http://laravel.com/docs/facades

简而言之,由于您将调用的 Response 类是 Facade,因此您需要将 Laravel 的 Response 外观替换为您自己的外观,自定义外观指向您自己的响应类。像这样的:

MyResponseFacade.php:

<?php namespace MyApp;

class MyResponseFacade extends \Illuminate\Support\Facades\Response
{
    public static function make($content = '', $status = 200, array $headers = array())
    {
        return new MyResponse($content, $status, $headers);
    }
}

MyResponse.php

<?php namespace MyApp

class MyResponse extends \Illuminate\Http\Response
{
    public function headers()
    {
        return $this->headers;
    }
}

然后在你的 app.php 中,替换:

'Response'        => 'Illuminate\Support\Facades\Response',

用这个:

'Response'        => 'MyApp\MyResponseFacade',

你就完成了!整个 Laravel 应用程序应该返回 Response,这是你自己的类,你可以使用相同名称的其余代码 Response

确保您正确配置了自动加载,并执行php artisan dump-autoload 以便 Laravel 可以看到您的新文件。


附带说明一下,您似乎是通过克隆框架项目来使用 Laravel。在这里查看答案以获得更好的方法:Should I download Laravel for every project?

【讨论】:

  • 哎呀,我不小心告诉您将 app.php 替换为 'Response' =&gt; 'MyApp\MyResponse',这是错误的。那必须是'Response' =&gt; 'MyApp\MyResponseFacade'。答案已更新。
  • 感谢您的回答。我知道直接编辑课程很糟糕,但我不知道如何以不同的方式进行。您的解决方案看起来不错,我验证了您的答案。
  • 事实上,你的代码应该可以工作,但在我的例子中,$response 过滤器参数似乎是一个Illuminate\Http\Response.php 实例。你知道我该如何改变吗?
  • 您能否在答案底部更新另一部分,告诉我们您所做的更改 + 代码?
  • 我创建了 2 个文件并按照您的说法编辑了 app.php 文件。就这样。而且我没有更改过滤器代码。
猜你喜欢
  • 2017-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-13
  • 2015-09-27
  • 1970-01-01
  • 1970-01-01
  • 2021-09-17
相关资源
最近更新 更多