Что такое автозагрузка в composer.json и как мы можем использовать это в laravel?

Я только начинаю работать с Laravel, хочу создать собственный класс и хочу вызывать этот класс в каждом контроллере. Для этого я создаю Customer класс в app/Library/ папка.

Когда я попытался автоматически загрузить эту библиотеку через композитор, 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 ответа

Вы должны удалить его из группы классов и просто добавить правильное пространство имен и класс. Вы можете увидеть все стандарты 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

Я думаю, вы не понимаете, для чего нужна автозагрузка композитора. Вы используете это для включения библиотек и их зависимостей, а не для классов, которые вы создали в своем приложении.

Лучше всего, когда вы создаете контроллер add в классе, который вы хотите использовать, например:

<?php
use App\Library\Customer;

Вы должны будете поместить это в каждый контроллер.

Там нет необходимости classmap как уже psr-4 автозагрузка на месте. Вы должны понять, как это работает. тогда вы можете просто импортировать ваши классы, используя use Ключевое слово, как это

<?php 

use App\Library\Customer;

Для получения дополнительной информации прочтите PSR-4: Autoloader и воспользуйтесь этим руководством

Другие вопросы по тегам