2016-05-27 6 views
3

Я хотел был бы использовать этот пакет https://github.com/FineUploader/php-traditional-server/ в моем проекте Laravel. Поэтому я модифицировал файл composer.json следующим образом:Как использовать класс поставщика в Laravel?

"require": { 
    "php": ">=5.5.9", 
    "laravel/framework": "5.2.*", 
    "fineuploader/php-traditional-server": "1.0.0" 
} 

И запустите команду создания команды. Но как я могу использовать класс UploadHandler (объявленный в handler.php пакета) на моем контроллере?

ответ

2

@scipilot ответ должен работать, но я дам свой собственный выбор:

Добавить эту часть вашего файла composer.json и запустить composer update.

"files": [ 
    "vendor/fineuploader/php-traditional-server/handler.php" 
] 

После этого класс будет виден в области проекта, и ваш скрипт будет работать.


Подробнее о файлах загрузки авто в композиторе здесь: https://getcomposer.org/doc/04-schema.md#files

+0

Когда я вызываю '$ u = new UploadHandler();' Он показывает 'класс 'MyApp \ Http \ Controllers \ UploadHandler' not found' – hienbt88

+1

@ hienbt88 Добавьте обратную косую черту перед' UploadHandler'. Например: '$ u = new \ UploadHandler();' –

+0

спасибо, он сработал – hienbt88

0

Вы попробовали использовать UploadHandler?
Composer имеет функцию автоматической загрузки, так что он может забрать свои «зависимости» на лету

+0

Я попробовал, и это не может быть виден. – hienbt88

+0

Это будет работать только в том случае, если пакет FineUploader зарекомендовал себя правильно в своем собственном composer.json. К сожалению, они этого не сделали, поэтому вызывающее приложение должно специально ориентироваться на ресурсы. Вы можете отправить запрос на тягу к ним с правильной спецификацией автозагрузки? – scipilot

6

Пакет не использует пространство имен или многое другое Композитор автозагрузка может обеспечить волшебно для вас, так что вы можете либо включить файл класса сами:

include "vendor/FineUploader/php-traditional-server/handler.php";

или как вы используете Composer автозагрузчика в Laravel, вы должны определить classmap.

В вашем композитору JSON:

{ 
    "autoload": { 
     "classmap": ["vendor/FineUploader/php-traditional-server"] 
    } 
} 

Затем запустите composer dump-autoload (в том числе "поставщик/autoload.php" уже предусмотрено ботинке Laravel).

Все классы в своей библиотеке будут автоматически загружены в тот момент, когда ваш код требует их.

Обновление: почему классная карта является наиболее подходящим способом.

Автозагрузка - это самый эффективный и эффективный способ загрузки класса, поскольку он только разобран, скомпилирован, загружен в память, когда класс действительно необходим. Автозагрузка «Classmap» - это предполагаемый механизм загрузки классов, которые не находятся в пространстве имен или не находятся в формате PSR0 или 4.

С другой стороны, с помощью глобальной (загрузки приложения) включают в себя набор классов, или аналогичным образом, используя опцию «файлы» в композиторе автозагрузчика будет наиболее эффективен, поскольку он будет загружен все зависимости для все приложение запрашивает, независимо от того, будут ли они использоваться или нет. Фактически использование автозагрузочных «файлов» для зависимостей классов хуже, чем традиционный подход, включающий в себя каждый из ваших скриптов. По крайней мере, тогда вы только предварительно загрузите конкретные требования, таким образом, как и автозагрузка в использовании памяти.

Опция автозагрузки файлов «файлы» предназначена для плоских библиотек функций (а не OO), которые просто предварительно загружаются во все запросы, потому что для вызовов функций нет механизма автоматической загрузки.

Обратите внимание, что использование кэшей op-code будет смягчать разницу в эффективности между ними, но проблема с использованием памяти остается.

 Смежные вопросы

  • Нет связанных вопросов^_^