Я создал класс на php с некоторыми вспомогательными методами, которые анализируют файлы HTML.

Я хотел бы использовать этот класс в моем проекте Laravel, но я новичок в Laravel, и неясно, как добавить простой класс в проект Laravel 5.

Это возможно? Или мне нужно заняться созданием пакета композитора для моего класса, разместить его где-нибудь, а затем require в моем файле composer.json. Похоже, что для включения простого класса PHP потребуется много работы, и я надеюсь, что есть более простой способ.

0
George Irimiciuc 16 Фев 2015 в 00:51

2 ответа

Лучший ответ

В настоящее время в Laravel 5 нет отличного / простого способа сделать это (возможно, по дизайну). Вы можете выбрать два подхода:

Создайте новый класс в пространстве имен App

По умолчанию Laravel 5.0 ищет классы с префиксом App\ в папке app/, так что что-то вроде этого должно работать

#File: app/Helpers/Myclass.php
<?php
namespace App\Helpers;
class Myclass
{
}

А затем создайте свой класс с помощью

$object = new App\Helpers\Myclass;

Этот подход, однако, основан на создании вами классов в пространстве имен App\, и есть некоторая двусмысленность в том, принадлежит ли пространство имен App\ Laravel или разработчику приложения.

Создайте собственное пространство имен и зарегистрируйтесь как автозагрузчик PSR-4

Лучшим, но более сложным подходом было бы создание классов в вашем собственном пространстве имен, а затем сообщить Laravel об этом пространстве имен, зарегистрировав новый автозагрузчик PSR.

Сначала вы создадите определение класса

#File: application-lib/Myclass.php
<?php
namespace Pulsestorm;
class Myclass
{
}

Обратите внимание, что мы создали новую папку в корневой папке для хранения наших классов с именем application-lib. Вы можете назвать эту папку как хотите, потому что на следующем шаге вы собираетесь добавить раздел в раздел автозагрузчика файла composer.json.

#File: composer.json
"autoload": {
    "classmap": [
        "database"
    ],
    "psr-4": {
        "App\\": "app/",
        "Pulsestorm\\": "application-lib/"          
    }
},

Раздел, который мы добавили, это

"Pulsestorm\\": "application-lib/"          

Ключ к объекту (Pulsestorm\) - это ваше пространство имен. Значение (application-lib) - это папка, в которой композитор должен искать файлы определения класса с указанным пространством имен.

После того, как вы добавили это в composer.json, вам нужно указать Composer, чтобы он регенерировал файлы кэша автозагрузки с помощью команды dumpautoload

$ composer dumpautoload
Generating autoload files

После выполнения вышеуказанного вы сможете создать экземпляр своего класса с помощью

$object = new Pulsestorm\Myclass;     

«Настоящий» правильный способ сделать это - создать общий пакет композитора для вашего вспомогательного класса, а затем require этот пакет композитора в ваш проект laravel. Однако для простого помощника по работе с библиотекой может потребоваться больше работы, чем вам хотелось бы.

4
Alan Storm 16 Фев 2015 в 03:18

Если ваш класс достаточно универсален, чтобы использовать его в других проектах, лучший способ - выпустить его как пакет.

Вот как вы создаете пакеты с Laravel 5: http://laravel.com/docs/5.0/packages

1
Robo Robok 16 Фев 2015 в 01:49