我在哪里把我的自定义类和函数放在 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 中的主要内容,如果未能解决你的问题,请参考以下文章

我在哪里把我的 favicon 和 Hugo 放在一起

如果“实用程序”类是邪恶的,我应该把我的通用代码放在哪里? [关闭]

自定义 Laravel 验证规则示例

我应该把我的 DTO 放在哪里?

把我的 php 文件放在哪里?

我应该把我的 Vaadin 10+ 静态文件放在哪里?