我在哪里把我的自定义类和函数放在 Laravel 中
Posted
技术标签:
【中文标题】我在哪里把我的自定义类和函数放在 Laravel 中【英文标题】:Where do I put my custom classes and functions in Laravel 【发布时间】:2019-04-25 11:38:17 【问题描述】:我正在尝试构建一个包含一些常用函数的类,我可以在项目中的任何地方使用这些函数。我不知道在哪里构建包含类的 php 文件或如何调用它们......谁能帮我弄清楚所有这些东西适合的位置?谢谢!!!
/App/Http/Helpers/MyClasses.php
<?php
class PopularFunctions
public function sayhi()
echo 'hi';
?>
/App/Http/Controllers/TasksController.php
<?php
namespace App\Http\Controllers;
use App\Http\Helpers\MyClasses;
class TasksController extends Controller
public function index()
$myfunctions = new PopularFunctions();
$myfunctions->sayhi();
这将返回:找不到类“App\Http\Controllers\PopularFunctions”。
【问题讨论】:
请添加您的文件夹结构以及您提到的类的路径和代码。 您应该能够在app
目录中的几乎任何位置放置一个新类。没有真正的限制。如果您发布您的代码和结构等,我们也许可以帮助您查明问题。
Laravel 配置为使用 composer PSR-4 自动加载器,根命名空间是 App
并且位于 app
文件夹下,只要您遵循标准并将文件放在 @987654327 下@他们应该被接走。如果没有尝试composer dump-autoload
重新创建自动加载文件
谢谢。我更新了我的问题。希望这可以澄清。
不要放在app/Http目录下。如果您想将该类用于控制台作业怎么办?那么Http目录就没有意义了。
【参考方案1】:
基本上,我们可以在app
目录中创建另一个目录(例如MyCustomStuff
),然后namespace
我们的文件正确。
我知道两种方法。
1.通过 Composer 实现全局函数
App/MyCustomStuff/MyGlobalTools.php
<?php
function sayhi()
echo 'hi';
?>
然后在composer.json中"autoload":
添加
"files": [
"app/MyCustomStuff/MyGlobalTools.php"
]
所以结构将是
"autoload":
"classmap": [
"database/seeds",
"database/factories"
],
"psr-4":
"App\\": "app/"
,
"files": [
"app/MyCustomStuff/MyGlobalTools.php"
]
,
更改自动加载后。然后运行composer dump-autoload
然后在控制器中,调用全局函数(无需导入),如:
public function index()
$res = sayHi();
2。或普通班
App/MyCustomStuff/MyClass.php
<?php
namespace App\MyCustomStuff;
class MyClass
function sayhi()
echo 'hi';
?>
在你的控制器中
<?php
namespace App\Http\Controllers;
use App\MyCustomStuff\MyClass;
class TasksController extends Controller
public function index()
$myfunctions = new MyClass();
$res = $myfunctions->sayhi();
【讨论】:
【参考方案2】:在 App/Http 中创建一个目录,说“Helpers”
在 Helpers 目录中创建一个类 CustomAvatar.php
<?php
class CustomAvatar
public $default_avatar='avatar.png';
public function make_custom_avatar()
// do your operation here
?>
现在如果你想在你的控制器中使用这个类:
use App\Http\Helpers\CustomAvatar;
...
public function create_user()
$customAvatar=new CustomAvatar();
$defaultAvatar = $customAvatar->default_avatar;
$user=new User();
$user->avatar=$defaultAvatar;
$user->save();
【讨论】:
【参考方案3】:在 Laravel 框架中,您只能在 app\Http\Controller 文件夹中创建控制器。如果你想创建一个自定义类,然后在 app 文件夹中创建。
例子:
文件:app\FAReports.php
命名空间应用程序;
类 FAReports
// DEF //
【讨论】:
【参考方案4】:您的原始代码不起作用,因为您没有命名您的助手类。 应该是:
/App/Http/Helpers/MyClasses.php
<?php
namespace App\Http\Helpers; //this was missing in your code
class PopularFunctions
public function sayhi()
echo 'hi';
?>
【讨论】:
【参考方案5】:在您的控制器中进行一些更改
<?php
namespace App\Http\Controllers;
use App\Http\Helpers\MyClasses\PopularFunctions;
class TasksController extends Controller
use PopularFunctions;
public function index()
$myfunctions = new PopularFunctions();
$myfunctions->sayhi();
【讨论】:
以上是关于我在哪里把我的自定义类和函数放在 Laravel 中的主要内容,如果未能解决你的问题,请参考以下文章