【问题标题】:Where do I put my custom classes and functions in Laravel我在哪里把我的自定义类和函数放在 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目录就没有意义了。

标签: php laravel function class namespaces


【解决方案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();
              
                }
              
              }
          

          【讨论】:

            猜你喜欢
            • 2014-01-04
            • 1970-01-01
            • 2014-11-01
            • 1970-01-01
            • 2021-09-15
            • 2018-06-14
            • 1970-01-01
            • 2017-05-09
            • 1970-01-01
            相关资源
            最近更新 更多