在 laravel 控制器中包含一个文件?

Include a file in laravel controller?

我正在创建一个项目,它以 .php 文件 API 的形式提供了一些附加功能,其中包含一些功能和一些 classes(其中一些 class 名称与 Laravel 内置 class 名称冲突)所以,我的问题是如何将此文件包含在我的 Laravel 控制器中以调用使用 [=文件的 19=]es 没有引用 Laravel classes 并且在 .php API 文件中修改较少或没有修改?

注意* 我正在使用 Laravel-5.1

创建别名

例如

use App\Http\Requests\Request as DifferentRequest;

DifferentRequest->doStuff();

Aliasing/Importing

按照@user2504370 的建议创建一个别名,

添加到作曲家:

"autoload": {
    "classmap": [
        "database",
        "place_with_your_file",
    ],
    "psr-4": {
        "App\": "app/",
        "your_namespace": "your path",
    }
},

和运行

composer dump-autoload

编辑: 类图中有错别字。我想告诉你,你可以随时放置你的文件,例如,你可以创建一个新文件夹'place_with_your_file',它不一定在Laravel的文件夹中。

我将它与我的外部库一起使用。

对于 PSR-4:如果您使用命名空间,那么您将在此处注册基本命名空间和可以找到的文件夹:

例如:"Utilities\": "../utilities/app"

或您的路径。

对于类图,您需要包含此文件夹的路径:

"../utilities/app"

您的自动加载将如下所示:

   "autoload": {
        "classmap": [
            "database",
            "../utilities/app",
        ],
        "psr-4": {
            "App\": "app/",
            "Utilities\": "../utilities/app"`
        }
    },

如果您有一个自定义文件,其中包含需要为每个请求加载的 classes/functions,您需要确保将其添加到自动加载器。

在您的 composer.json 中,在 autoload 部分添加以下内容:

"autoload": {
  "files": [
    "path/to/your/File.php"
  ]
}

这将确保文件已加载。现在您需要的是一种在不与现有 Laravel classes 冲突的情况下使用这些 classes 的方法。

首先,确保包含文件的顶部有名称空间声明 - 例如 名称空间 Your\Namespace。为了避免冲突,你需要在代码中引用它的时候明确告诉PHP你指的是哪个class。您提到您的文件包含 Response class,它也存在于 Laravel 中。为了能够同时使用两者,您需要为其中之一起别名:

use Illuminate\Http\Response as LaravelResponse;
use Your\Namespace\Response;

现在在您的代码中,您可以将 Laravel 的响应 class 称为 LaravelResponse,并且您的响应只需回应.

文件的位置无关紧要,只要它位于 Laravel 可访问的文件夹中并且其补丁已添加到 composer.json.

请记住,不鼓励每个文件存储多个 classes,这是一种不好的做法。我强烈建议您将每个罚款分成单独的文件 class + 一个具有全局功能的附加文件。

感谢大家为解决我的问题所做的努力,但是 none 的解决方案对我有用,所以,这是我为我的问题所做的尝试

下面是我想要 includes/integrate

的 php 文件的结构
<?php

class Misc {

    const SUCCESS = 1;
    const FAILURE = 0;

    public static function get_hash ( $key )
    {
        ...
        ...
        ...
    }

    public static function show_reponse ( $result )
    {
        ...
    }

}

function check($keyhash) 
{
    ...
    ...
    ...
}

function function2() 
{
    ...
    ...
    ...
}

class Response {

    public function __construct ( $key )
    {
        ...
    }

    public function __destruct ()
    {
        unset( $this->key );
        unset( $this->params );
    }

    public function __set ( $key)
    {
        ...
    }

    public function __get ( $key )
    {
        return $this->params[$key];
    }

    private function check_now ()
    {
        ...
    }
}

我面临的主要问题是 class 名称 Response 与 Laravel Response class 冲突,所以我删除了所有 classes 从文件中移动到 Laravel\App 文件夹中新文件夹中的各自文件,并向所有 classes 添加命名空间。

然后我将所有函数移动到 laravel\App 目录

的 PHP 文件中

并使用了 class 名称以及定义的名称空间,因为我将所有函数移到了不同​​的 PHP 文件中,所以我可以轻松调用函数

所以这是我最终的 Laravel

文件夹结构

Laravel

  -App
    -Console
    -Events
    -Exceptions
    -...
    -Libraries(Folder Containing Individual PHP files of classes from original file)
    -Providers
    -helpers.php(File containing all functions from original file)
    -User.php
  -bootstrap
  -...
  -...