2015-06-29 7 views
6

Я новичок в Composer, пространствах имен и автозагрузке, и мне не удалось выяснить, где написать мой код (под vendor?).Где я должен писать свой код, чтобы Composer мог автозагружать мои классы PHP?

Я создал каталог с именем ilhan под номером vendor и файл с именем People.php. Тогда в основном index.php файл с использованием use ilhan\People.php as People; не работает, потому что я думаю, что он, должно быть, был написан в autoload_namespaces.php изначально.

Но если я зарегистрирую ilhan в качестве поставщика, то, думаю, композитор будет смотреть на packagist.org, которого там нет.

ответ

7

Создать ilhan в корне каталога проекта, а не в vendor каталоге и поставить следующее в вашем composer.json,

"autoload": {      
     "psr-4": { 
      "Ilhan\\": "ilhan/" 
     }    
    }, 

Скорее всего, у вас уже есть psr-4 autoload config добавлен в ваш файл composer.json, если вы используете какой-то фреймворк, в этом случае просто добавьте "Ilhan\\": "ilhan/". Теперь создайте People.php внутри ilhan директории со следующим содержанием

<?php 

    namespace Ilhan; 

    class People{} 

Убедитесь require __DIR__.'/vendor/autoload.php'; включен в index.php любой, как, а затем запустить composer dump-autoload.

Сейчас в index.php только ржали require __DIR__.'/vendor/autoload.php'; должно работать,

use Ilhan\People; 

Но почему вы хотите использовать People класс в index.php?

+0

Спасибо! Он работает именно так, как я хотел! Класс «Люди» предназначен только для тестирования, я переведу его в другой файл. Я использую [Restler] (https://github.com/Luracast/Restler). – ilhan

0

Ваш код попадает в корневую директорию вашего проекта (или любого подкаталога). Папка vendor предназначена только для пакетов/библиотек, загружаемых композитором, и вы ни в чем не должны ничего менять.

Чтобы начать проект, просто создайте новый файл, например. /my-project/index.php и требует autoload.php, который автоматически создается композитор:

<?php 
    require __DIR__.'/vendor/autoload.php'; 

    // here comes your project code 

Для получения дополнительной информации о автозагрузке см официальной документации композитора на Basic Usage: Autoloading

+0

У меня есть 'require_once '../ vendor/restler.php';', который загружает autoload.php, а затем загружает Restler и Illuminate \ Database. Но я хочу загрузить свои собственные классы таким образом. – ilhan