Я использую эти две библиотеки от композитора
"require": {
"alterfw/php-form-generator": "^0.1.2",
"rlanvin/php-form": "dev-master"
},
Самая большая проблема - это одно и то же имя класса Form
без определения namespace
. Теперь независимо от того, я либо создаю экземпляр только одного класса, либо оба на одной странице, он дает мне ошибку, как показано ниже
Fatal error: Call to undefined method Form::create() in...
create
метод заключается в создании разметки формы из alterfw/php-form-generator
.
Поэтому, когда я попробовал это
$form = Form::create('path-to-action.php');
$form->add(Form::text('settings')->setLabel('Settings')->setValue('None'));
echo $form->render();
Даю мне ошибку, упомянутую выше. Для меня трудно понять, почему даже я не создаю экземпляр другого класса, он все еще дает ошибку.
Я тоже не так хорошо знаком с композитором, чтобы копаться в себе без руководства.
Так можно ли использовать оба библиотеки одновременно?
Совет. Пакеты без пространства имен поставщиков являются плохой практикой, как вы можете видеть здесь. Я рекомендую создать проблему для обоих пакетов, говоря, что они действительно должны добавить пространство имен поставщиков.
Проблема здесь в том, что, как только вы используете Form
в своем коде, класс еще не загружен и запущен автозагрузчик Composer. Поскольку у него есть 2 пакета для загрузки класса, он выберет первое зарегистрированное правило автозагрузки. Это приводит к неправильному классу формы: проблема!
Вы можете поменять местами пакетов в своем composer.json
, но это означает, что другой класс больше не используется.
Другое решение - потребовать сам класс, используя функции require()
/require_once()
PHP. Это плохая практика, а также означает, что вы можете использовать только один из двух классов Form
(требующий другого класса формы после того, как уже требуются результаты в "классе с именем" Form "уже существует" ошибка PHP ").
TL; DR: вы можете использовать только один из двух пакетов в одном приложении.
В действительности нет недостатка в библиотеках проверки подлинности. Для каждой отдельной структуры должен быть один компонент для этого.
Поэтому я бы рекомендовал тщательно выбирать ваши библиотеки.
У нас есть первая библиотека "alterfw/php-form-generator", которой 4 года, с тех пор она не поддерживается, пока она не разлетелась 4 месяца назад с добавлением composer.json
. Четыре года назад PHP 5.2 все еще был распространен, поэтому совершенно не удивительно, что этот код не имеет пространства имен. У него также нет реальной документации, потому что ссылка в файле readme мертва. Разветвленное хранилище этой библиотеки не позволяет создавать проблемы. :( Я сомневаюсь, что восходящий репозиторий будет заботиться о чем-либо после 4 лет его несоблюдения.
Вторая библиотека "rlanvin/php-form", похоже, связана с непубличным кодом. Вы открыли билет, чтобы добавить пространство имен к этому одному классу, и фактически получили отказ (заявив, что сопровождающий не добавит пространства имен, потому что он более удобен для него, но вы можете отредактировать файл самостоятельно, чтобы добавить его, просто не вырезал его). Packagist показывает, что эта библиотека имеет 31 установку. Не совсем правильно сказать, что "никто не использует этот код", но он очень близок.
Если ваша задача - проверка формы и формирование формы, я бы сказал, что либо компоненты Symfony, либо Zend, скорее всего, будут выполнять эту задачу очень хорошо. Вероятно, нет необходимости обращаться к библиотекам, которые "никто" использует, и которые не применяют современные методы разработки, такие как пространства имен (доступные с PHP 5.3, выпущенные в 2009 году).