如何在Laravel 5.4.10中添加自定义类

时间:2018-08-27 07:07:27

标签: php laravel laravel-5

我是Laravel新手。 我正在控制器方法中编写以下代码。

include_once(app_path() .'/Classes/Pgp_2fa.php');
$pgp = new Pgp_2fa();

显示以下错误。

  AuthController.php第146行中的

FatalThrowableError:类   找不到“ App \ Http \ Controllers \ Pgp_2fa”

6 个答案:

答案 0 :(得分:2)

您必须为类使用正确的名称空间。

如果不使用任何名称空间,则应在类前面添加\,以使php知道该类存在于根名称空间中。否则,当您在控制器中时,php将在当前的命名空间App\Http\Controllers中查找。

$pgp = new \Pgp_2fa();

这不仅是Laravel的行为,还是一般的php。

答案 1 :(得分:2)

您需要为自定义类添加名称空间 或者只是在您的班级名称上添加斜线。就像:

$pgp = new \Pgp_2fa();

答案 2 :(得分:2)

添加新类时,有几种使用方法。 (我是说,加载它们)

如果您的类具有唯一的名称并且不使用名称空间,则可以在类的开头添加反斜杠\

$class = new \Pgp_2fa;
  

但是如果要定义它们的名称空间并使用相同的名称,则   很多次,那么您必须在composer.json中添加这些类。打开你的   composer.json并进入“自动加载”部分并定义类   类映射中的目录

"autoload": {
        "classmap": [
            "database/seeds",
            "database/factories",
            "app/Classes",     // so all classes in this directory are going to load     
        ],

在进行这些更改并创建新的类之后,别忘了说composer dump-autoload

  

如果您不想在添加新类时转储作曲家,   那么您可能需要在作曲家的psr-4部分中添加这些类

"autoload": {

    "psr-4": {
        "App\\": "app/",
        "App\\Classes\\": "app/Classes",

    }
},

答案 3 :(得分:0)

  

您可以像下面那样在内部构造函数中调用,并且可以使用   其余函数中的 $ Pgp_2fa 变量

 class controllername extends Controller
      {
        public function __construct(Route $route,Request $request)
          { 
            $Pgp_2fa = new \Pgp_2fa();
          }
      }

答案 4 :(得分:0)

您可以通过将自定义类添加到Composer的自动加载数组中来轻松添加自定义类。转到composer.json并将其添加到:

"autoload": {
    "files": [
      "app\\Classes\\Pgp_2fa.php"
    ]
  },

现在,在您的应用文件夹中的classes文件夹下,添加将包含您的课程的Pgp_2fa.php文件。您可以在任何需要的地方使用它,它应该会自动自动加载。

添加班级写命令后:

composer dumpautoload刷新自动加载类映射。

答案 5 :(得分:0)

例如,在应用程序目录中名为Mylibs的目录中有我们的类 Common.php

app / mylibs / Common.php 我们需要命名空间App \ Mylibs ;

namespace App\Mylibs;

class Common {

   public function getSite() {
        return 'AmirHome.com';
    }

}

现在,您可以像其他Laravel类一样使用类中的命名空间访问此类。

使用App \ Mylibs \ Common

在控制器中:

namespace App\Http\Controllers;

use App\Mylibs\Common;

class TestController extends Controller {

   protected $common;

   public function __construct(Common $common) {
       $this->common = $common;
   }

   public function index() {
       echo $this->common->getSite();
   }     
}