2013-12-12 3 views
0

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

У меня есть 2 класса, которые я хотел бы добавить в проект symfony.

seculibs/collections/A.php и seculibs/collections/B.php (это не на github, оно локально).

Я хотел бы добавить свою папку seculibs в папку поставщика и попросить symfony загрузить классы.

Очевидно все происходит в app/autoload.php

Я думал, что делать это было бы хорошо, но не так:

$loader->add('seculibs/collections',__DIR__ . '/../vendor/seculibs/collections/'); 

она до сих пор не может найти классы.

Может ли кто-нибудь сказать мне, что делать? Я с Symfony 2.3.6

Пожалуйста, не относится к composer.json ни к UniversalClassLoader и его методу registerNamespaces, поскольку это не класс, я имею дело с таким autoload.php

+1

Вы не должны класть вещи в папке поставщика. Материал там предназначен исключительно для доступа к записи. Что касается отсутствия загрузки, как это бывает досадно, иногда (при условии, что все правильно, но это просто не «щелчок»), перезагрузка делает трюк – qooplmao

ответ

1

Так что я нашел правильный синтаксис ... Это поможет некоторым другим

$loader->add('seculibs\\collections',__DIR__ . '/../vendor'); 
0

вы должны автозагрузкой классов? Я использовал свои собственные классы, просто предоставив им пространство имен в моем проекте, а затем включив их с оператором use в файл, в который я хотел бы их использовать. Например, у меня есть класс, который я помещал в пользовательское местоположение в рамках моего проекта, src/My/AppBundle/Utils/MyClass.php, и в файле MyClass.php, я дал имена My/AppBundle/Utils

Теперь в контроллере, я включаю этот класс с нормальным use заявлением.

use My/AppBundle/Utils/MyClass.php 
// ..... 

class MyController extends Controller { 
    // .... 
} 

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

UPDATE:

Это не имеет значения, где вы положили файлы. Если вы хотите, чтобы они были в папке поставщика, поместите их туда и дайте им пространство имен, которое имеет смысл.

Так, может быть, у вас есть что-то вроде этого:

// in vendors/MyUtils/Classes/MyClass.php 

namespace MyUtils/Classes 

class MyClass { 
    // .... 
} 

И тогда вы можете включать в себя класс с use заявление, как я уже говорил.

+0

Я понимаю это ... Я говорю, если я хочу добавить их в папка поставщика – mlwacosmos

+0

см. мое обновление, расположение файла не имеет значения. Что имеет значение, это пространство имен – Sehael

+0

Мои классы - это пространство имен ... это ничего не меняет, я должен загрузить их ... namespace недостаточно – mlwacosmos

0

Посмотрите на поставщика/композитора/ClassLoader.php Вы можете видеть, что метод add ожидает префикс в качестве первого аргумента. Вы можете оставить его пустым, если ваши классы не имеют пространства имен.

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

$loader->add(null,__DIR__ . '/../vendor/seculibs/collections/'); 

$a = new \A(); 

Если у них есть пространство имен, то просто передать префикс пространства имен, чтобы добавить.

$loader->add('Cerad',__DIR__ . '/../vendor/seculibs/collections/'); 

namespace Cerad\Collections; 
class A {} 

$a = new Cerad\Collections\A(); 

Конечно, вы также должны иметь структуру каталогов Cerad \ Collections под своим каталогом поставщиков.

================================================================================================================================================

Update

Если у вас есть в /vendor/seculibs/collectionsA.php:

namespace seculibs\collections; 

class A { 

Тогда используйте:

$loader->add('seculibs',__DIR__ . '/../vendor/'); 

И

use seculibs\collections\A; 

$a = new A(); 
+0

Мои классы помещаются в имена, поэтому я написал: $ loader-> add ('seculibs', __DIR__. '/../vendor/seculibs/collections'); и когда я их называю, я использую seculibs/collections/name_of_my_class, но он не работает. – mlwacosmos

+0

не так ли? – mlwacosmos

+0

Обновите свой вопрос и включите верхнюю часть одного из ваших классов (i..e. Namespace, а затем оператор замедления класса, а затем покажите образец нового оператора. Я также обновил ответ. – Cerad

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