在 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();
按照@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
-...
-...
我正在创建一个项目,它以 .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();
按照@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
目录
并使用了 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
-...
-...