Вызов помощника symfony из php-скрипта, необходимого для Ajax?

N00b вопрос:

Я использую Symfony с Doctrine. У меня есть форма, в которую я добавил небольшую проверку Jquery и Ajax на предмет того, существует ли имя пользователя, введенное в форму. jQuery вызывает короткий PHP-скрипт в корневом каталоге моего веб-сайта, который выполняет проверку базы данных MySQL и возвращает значение true/false, которое затем используется для определения отображаемого сообщения об ошибке.

Однако, если возможно, я бы хотел переместить вызов базы данных во вспомогательную функцию symfony, которая затем возвращает true/false, а не иметь всю информацию о подключении и т. д. в моем веб-корне. Но я не могу правильно вызвать вспомогательную функцию - все остальные компоненты функциональности работают нормально.

Это то, что у меня есть в моем маленьком php-скрипте:

$availability = GenericHelper::checkUsername();  // a public static function
echo $availability; // returns true/false to Jquery

Кто-нибудь? Спасибо.


person Tom    schedule 26.01.2010    source источник
comment
Какую версию Symfony вы используете? Ваш PHP-скрипт находится в действии модуля вашего проекта Symfony?   -  person Guillaume Flandre    schedule 26.01.2010
comment
Я использую symfony 1.4, в предыдущих версиях были помощники ajax, но больше нет.   -  person Tom    schedule 26.01.2010
comment
Позвольте мне посоветовать вам использовать отдельный контроллер для запросов Ajax.   -  person Darmen Amanbayev    schedule 26.01.2010
comment
@ Дармен ... что ты имеешь в виду? Не могли бы вы уточнить?   -  person Tom    schedule 26.01.2010
comment
@Darmen ... вы имеете в виду создание отдельного модуля и пересылку этого запроса в этот модуль, а затем обратно?   -  person Tom    schedule 26.01.2010
comment
@ Том, да, я имею в виду именно то, что ты говоришь   -  person Darmen Amanbayev    schedule 27.01.2010


Ответы (2)


Помощники не предназначены для такой работы (они предназначены только для работы, связанной с «просмотром», то есть для создания html и т. д.).

Вместо этого вы должны создать действие (либо в том же контроллере, что и ваша форма, либо в выделенном контроллере ajax, лично я нахожу первый вариант более простым в обслуживании), которое будет выполнять проверку имени пользователя с использованием метода модели. См. http://gist.github.com/286797 для примера кода о том, как это сделать ( обратите внимание, что этот код не тестировался и поэтому не может работать ootb).

Затем вы должны направить запрос Ajax на это действие.

person Geoffrey Bachelet    schedule 26.01.2010
comment
Спасибо, Джеффри, это имеет смысл. Однако то, что я изо всех сил пытаюсь понять как новичок, - это то, как этот вызов метода наиболее эффективно достигается. Я не могу поместить его в JQuery, поэтому мне все еще нужен фрагмент php-скрипта где-то в моем веб-корне или глубже. Это правильно? - person Tom; 26.01.2010
comment
Нет, вам нужно сгенерировать URL-адрес для вашего действия и передать его обработчику Jquery ajax. Я обновил Gist по адресу gist.github.com/286797 с простой маршрутизацией и шаблонами, чтобы отразить это: -) - person Geoffrey Bachelet; 26.01.2010

Вы правильно загрузили хелпер?

sfContext::getInstance()->getConfiguration()->loadHelpers('Generic');

Тогда вы сможете напрямую вызывать checkUsername().

Или вы можете попробовать поместить GenericHelper.class.php в каталог lib/, таким образом он будет автоматически загружен.

person Guillaume Flandre    schedule 26.01.2010
comment
Спасибо, Гийом, попробовал это раньше и попробовал снова с вашим точным кодом ..... безрезультатно. Он не возвращает никакой ошибки. Как будто ничего не делает. - person Tom; 26.01.2010