【问题标题】:Where are namespaces declared in Laravel?Laravel 中声明的命名空间在哪里?
【发布时间】:2019-03-16 05:30:30
【问题描述】:

我在 php 中了解到,要能够使用命名空间,您必须先声明或包含。

<?php
    namespace namespace_01;

    function f1()
    {
        echo 'this is function';
    }

    use namespace_01 as test_namespace;
    test_namespace\f1();
?>

几乎所有的 laravel 代码都使用命名空间。但是它们是在哪里定义的呢?

例子,

当我创建控制器时。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class controller1 extends Controller
{
    //
} 

Illuminate\Http\Request 定义在哪里?

【问题讨论】:

  • 设置适当的 IDE,如 PhpStorm,您将通过 cmd+单击任何内容获得体验提升。其他 IDE 等编辑器(免费)对更多配置执行相同操作。

标签: laravel laravel-5.4


【解决方案1】:

这些可以在Laravel Framework 中找到。 Laravel 使用 composer 自动加载这些包。您可以在 /vendor 文件夹中找到源代码,这是 composer 放置包的地方。

【讨论】:

  • 谢谢@jerodev。你说自动加载。你的意思是所有这些包?这是为什么有时 laravel 很慢的原因之一。?即使您不需要它,它也会加载所有这些。
  • Laravel 框架中的大多数类都是延迟的,这意味着它们只在需要时才加载。
  • “延期”。谢谢@Jerodev
【解决方案2】:

vendor/laravel/framework/src/Illuminate/Http/Request.php打开文件

你会看到命名空间在顶部声明为namespace Illuminate\Http;,类名是Request

你可以在你的composer.json文件中看到

"autoload": {
        "classmap": [
            "database/seeds",
            "database/factories"
        ],
        "psr-4": {
            "App\\": "app/"
        }
    },

所以 App 文件夹中的所有类都会自动加载作曲家以及供应商文件。您不需要每次都包含文件。

【讨论】:

  • 谢谢@Emtiaz。好的,App文件夹中的所有类都是自动加载的。但是代码自动加载供应商文件夹在哪里?
  • 你运行 composer install 了吗?
  • 如果您已经这样做了,那么您应该会在项目根目录中看到供应商文件夹
  • composer 自动加载 App 文件夹。作曲家是否还会自动加载供应商文件夹?
  • 查看里面的每个包文件夹,其中包含 composer.json 文件。这就是包类也是自动加载的方式
猜你喜欢
  • 1970-01-01
  • 2011-02-10
  • 1970-01-01
  • 2012-09-25
  • 2011-01-31
  • 1970-01-01
  • 1970-01-01
  • 2012-07-19
  • 1970-01-01
相关资源
最近更新 更多