Композитор: конфликт двух классов классов

1

Я использую эти две библиотеки от композитора

"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();

Даю мне ошибку, упомянутую выше. Для меня трудно понять, почему даже я не создаю экземпляр другого класса, он все еще дает ошибку.

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

Так можно ли использовать оба библиотеки одновременно?

Теги:
composer-php

2 ответа

4
Лучший ответ

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

Проблема здесь в том, что, как только вы используете Form в своем коде, класс еще не загружен и запущен автозагрузчик Composer. Поскольку у него есть 2 пакета для загрузки класса, он выберет первое зарегистрированное правило автозагрузки. Это приводит к неправильному классу формы: проблема!

Вы можете поменять местами пакетов в своем composer.json, но это означает, что другой класс больше не используется.

Другое решение - потребовать сам класс, используя функции require()/require_once() PHP. Это плохая практика, а также означает, что вы можете использовать только один из двух классов Form (требующий другого класса формы после того, как уже требуются результаты в "классе с именем" Form "уже существует" ошибка PHP ").

TL; DR: вы можете использовать только один из двух пакетов в одном приложении.

  • 0
    Спасибо за такой отличный гид и понимание. Я создам проблему на обоих репо. большое спасибо
1

В действительности нет недостатка в библиотеках проверки подлинности. Для каждой отдельной структуры должен быть один компонент для этого.

Поэтому я бы рекомендовал тщательно выбирать ваши библиотеки.

У нас есть первая библиотека "alterfw/php-form-generator", которой 4 года, с тех пор она не поддерживается, пока она не разлетелась 4 месяца назад с добавлением composer.json. Четыре года назад PHP 5.2 все еще был распространен, поэтому совершенно не удивительно, что этот код не имеет пространства имен. У него также нет реальной документации, потому что ссылка в файле readme мертва. Разветвленное хранилище этой библиотеки не позволяет создавать проблемы. :( Я сомневаюсь, что восходящий репозиторий будет заботиться о чем-либо после 4 лет его несоблюдения.

Вторая библиотека "rlanvin/php-form", похоже, связана с непубличным кодом. Вы открыли билет, чтобы добавить пространство имен к этому одному классу, и фактически получили отказ (заявив, что сопровождающий не добавит пространства имен, потому что он более удобен для него, но вы можете отредактировать файл самостоятельно, чтобы добавить его, просто не вырезал его). Packagist показывает, что эта библиотека имеет 31 установку. Не совсем правильно сказать, что "никто не использует этот код", но он очень близок.

Если ваша задача - проверка формы и формирование формы, я бы сказал, что либо компоненты Symfony, либо Zend, скорее всего, будут выполнять эту задачу очень хорошо. Вероятно, нет необходимости обращаться к библиотекам, которые "никто" использует, и которые не применяют современные методы разработки, такие как пространства имен (доступные с PHP 5.3, выпущенные в 2009 году).

  • 0
    Это замечательный совет и хорошо объяснил. Я ценю. На основании ваших отзывов у меня возник вопрос, могу ли я использовать компоненты генератора форм Symfony или Zend в ядре PHP или в другой CMS (например, в пользовательском плагине WordPress)? Так как я разрабатываю плагин для WordPress.
  • 0
    Вероятно, вам стоит тогда заглянуть в Symfony - я считаю, что они тщательно позаботились о том, чтобы вы могли использовать любой компонент изолированно. Вам по-прежнему приходится иметь дело с неспособностью Wordpress обеспечить простую установку с поддержкой композиторов (в прошлый раз, когда я смотрел, они все еще обсуждали, как это сделать, но где-то была только экспериментальная ветка). Это немного усложнит ситуацию, но я думаю, что общий вопрос «как интегрировать компоненты, основанные на композиторе, в плагин WordPress» должен иметь ответы в сообществе WordPress - поищите его в Google или задайте их.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню