2015-01-23 2 views
1

Я новичок в Php и композитор, я хочу, чтобы получить доступ к классу Php к другому модулю с помощью композитора, Это моя основная структура проекта (два модуля общего и рабочий) index.phpКак использовать Composer для загрузки php-классов из локального репозитория?

TestLocalRepository 
--/Souce Files 
    --/common 
     --/vendor 
      --/canvass 
       --/test 
        --test.php 
      --/composer 
      --autoload.php 
     --composer.json 
    --/worker 
     --/vendor 
      --/composer 
     composer.json 
     temocaller.php 
    --index.php 

общего/поставщика /canvass/test.php

<?php 
namespace test; 
class test { 
    //put your code here 
    function __construct() { 
     echo "hello"; 
    } 
} 
?> 

общие/composer.json

{ 
    "name":"canvass/test", 
    "type":"package", 
    "version": "1.0.0" 
} 

работник/composer.json

{ 
    "autoload": { 
     "psr-4": { 
      "test":"../common/vendor/canvass" 
     } 
    } 
} 

работник/tempcaller.php

<?php 
require_once dirname(__FILE__) . '../vendor/autoload.php'; 
use test; 
class tempcaller { 
    //put your code here  
    function __construct() { 
     echo "tempcaller"; 
     $obj = new test(); 
    } 
} 
$t = new tempcaller(); 
?> 

Я не в состоянии сделать это с PSR-0 или хранилищами либо, есть ли способ сделать это?

ответ

2

Что вы показываете здесь один проект TestLocalRepository, который состоит из двух отдельных Composer проектов, common и worker в папке Source, каждый из которых имеет файл composer.json и их собственную папку поставщика. Я думаю, что ваша структура проекта не оптимальна.

С моей точки зрения, вы можете разместить эти два проекта в папке поставщика основного проекта, а не внутри исходной папки. Мое предложение было бы использовать один проект TestLocalRepository и включать оба модуля common и worker в качестве зависимостей этого проекта (в вашем composer.json).

Вы бы получить структуру, как это:

TestLocalRepository 
- composer.json 
+- src 
    - index.php 
+- vendor 
    - autoload.php 
    +- common   
    +- worker 
     - temocaller.php 

Сейчас: на composer update, зависимости общего и работник будет неправдоподобным и помещается в папку поставщика, то самозарядные будет генерироваться. Затем в вашем src/index.php вы просто включите require 'vendor/autoload.php'; и $t = new test/temocaller();;


Если это не то, что вы хотите, то вы можете использовать композитор Autoloader и добавить пользовательское местоположение для классов к нему. В вашем index.php: первые требуют автозагрузчика затем добавить папку классов из автозагрузки, например, так:

$loader = require 'vendor/autoload.php'; 
$loader->add('SomeWhere\\Test\\', __DIR__); 

или просто добавить пути к composer.json внутри TestLocalRepository.

+1

Спасибо, что сделал для меня работу :) –