composer.json中的autoload是什么?我们如何在laravel中使用它?

时间:2017-08-02 02:49:33

标签: php laravel composer-php autoload composer.json

我刚开始使用 Laravel ,想要创建一个自定义类,并希望在每个控制器中调用此类。为此,我在Customer文件夹中创建了一个app/Library/类。

当我尝试通过composer自动加载这个库时,json发出错误:

  

无法扫描“App / Library / Customer”中的类,这些类似乎不是文件,也不是文件夹。

我们如何在控制器中使用自动加载类?

Customer.php

<?php
    namespace App\Library;
    use App\Model\User;
    class Customer
    {
        public function login($user_name,$password){
            $data = User::where('email', $user_name)
              ->where('password', $password)
              ->first();
            return $data->id';
        }
    }

Composer.json的自动加载部分

{
    "autoload": {
        "classmap": [
            "database",
            "app/Library/Customer"
        ],
        "psr-4": {
            "App\\": "app/"
        },
        "files" : [
            "app/Helper/helper.php"
        ]
    }
}

3 个答案:

答案 0 :(得分:0)

我认为你不了解作曲家自动加载的内容。您可以使用它来包含库及其依赖项,而不是您在应用程序中创建的类。

你最好做的是在你想要使用的类中创建控制器添加时,例如:

<?php
use App\Library\Customer;

您需要将其放在每个控制器中。

答案 1 :(得分:0)

您应该从classmap组中删除它,只需添加适当的命名空间和类。您可以在此处查看所有psr-4标准:http://www.php-fig.org/psr/psr-4/

假设你有一个像这样的文件夹结构:

app
    -> Library
        -> Customer.php // namespace App\Library; class Customer{}
    -> Model
        -> User.php // namespace App\Model; class User{}

只要您使用正确的命名空间和类名,所有文件都应自动加载。

顺便说一句,您应该使用Auth外观:https://laravel.com/docs/5.4/authentication

答案 2 :(得分:0)

由于psr-4已经use自动加载,因此无需<?php use App\Library\Customer; 。你了解它是如何工作的。那么您只需使用FOO = { common : { init : function(){ ... }, finalize : function(){ ... } }, shopping : { init : function(){ ... }, cart : function(){ ... }, category : function(){ ... } } } FOO.common.init(); FOO.shopping.init(); 关键字导入您的课程,就像这样

{{1}}

有关详细信息,请参阅block-level element并获取此PSR-4: Autoloader