【问题标题】:How do the laravel factory helper functions work with regards to namespacing?laravel 工厂辅助函数在命名空间方面如何工作?
【发布时间】:2015-10-17 03:54:06
【问题描述】:

好的,所以这是一个相当具体的问题,我不一定期待得到回应,但如果有人能指出我正确的方向以获得答案,那就太好了。所以我一直在阅读 Laravel 的文档,我遇到了一个部分 (http://laravel.com/docs/5.1/responses#basic-responses),它对生成响应对象有以下建议:

返回完整的 Response 实例允许您自定义 响应的 HTTP 状态代码和标头。一个 Response 实例继承 来自 Symfony\Component\HttpFoundation\Response 类,提供一个 多种构建 HTTP 响应的方法:

use Illuminate\Http\Response;

Route::get('home', function () {
    return (new Response($content, $status))
                  ->header('Content-Type', $value); 
}); 

为方便起见,您还可以使用响应助手:

Route::get('home', function () {
    return response($content, $status)
           ->header('Content-Type', $value); 
});

所以我的问题是,关于后一个代码示例,为什么它们不再需要包含 use Illuminate\Http\Response; 导入?或者更具体地说,response() 函数中发生了什么意味着我们不必这样做?

【问题讨论】:

    标签: php laravel namespaces laravel-5


    【解决方案1】:

    这实际上是标准的PHP namespacing,而不是 Laravel 正在做的独特的事情。 use 语句仅在使用命名空间类时才需要。

    response() 辅助函数没有命名空间(它位于全局命名空间中),因此它不需要 use 语句。

    Illuminate\Http\Response 类是命名空间的,所以它需要一个use 语句。

    Laravel 辅助函数驻留在vendor/laravel/framework/src/Illuminate/Foundation/helpers.php,并且这个文件没有命名空间集。如果是这样,您会在其顶部看到namespace Illuminate/Foundation

    【讨论】:

    • 不,发生的是 response() 函数使用了完全限定的类名,因此它不需要通过 use 关键字导入类。即使您不在任何命名空间下并尝试调用 Response,您也会收到错误。
    • @IlyasSerter 嗯,不,这是完全错误的。 response() 函数位于 vendor/laravel/framework/src/Illuminate/Foundation/helpers.php 中,这是一个非命名空间(例如全局命名空间)文件。它不是“完全限定的类名”,因为根本不涉及任何类。这是一个简单的功能。我坚持我的答案。
    • response() 函数显然不属于任何类或命名空间。我的意思是,该函数使用完全限定的类名来引用响应工厂并创建响应类的实例。我假设@LeonAves 已经了解 response() 是如何被调用的,他在问里面发生了什么。
    猜你喜欢
    • 2019-02-28
    • 2015-09-10
    • 2022-10-25
    • 2019-05-03
    • 2016-03-27
    • 2016-03-13
    • 2013-03-11
    • 1970-01-01
    • 2020-05-23
    相关资源
    最近更新 更多