Symfony sfDoctrineGuard плагин sfGuardUser модуль - PullRequest
1 голос
/ 08 июня 2010

При использовании плагина sfDoctrineGuard он автоматически генерирует функции администрирования бэкэнда, в которых я могу редактировать пользователей системы и назначать им разрешения.

Поэтому я посещаю http://.../backend_dev.php/sf_guard_user/:id/edit, где мне предоставляют информацию о пользователе, включая информацию о пользователе.доступные разрешения на выбор.

По умолчанию разрешения отображаются в виде поля множественного выбора, HTML выглядит следующим образом:

<select name="sf_guard_user[permissions_list][]" multiple="multiple" id="sf_guard_user_permissions_list">
  <option value="1">Permission1</option>
  <option value="2">Permission2</option>
  <option value="3">Permission3</option>
  <option value="4">Permission4</option>
</select>

Я бы предпочел список флажков.Поэтому я искал и обнаружил, что если я добавлю параметр «расширенный», установленный в значение true, к следующему коду:

'permissions_list' => new sfWidgetFormDoctrineChoice(array('multiple' => true, 'model' => 'sfGuardPermission', 'expanded' => true,)),

Код является частью этого файла: lib / form / doctrine / sfDoctrineGuardPlugin / base /BasesfGuardUserForm.class.php.Я не думаю, что мне нужно было редактировать этот файл (возможно, изменения будут перезаписаны, если sfDoctrineGuard когда-либо будет переустановлен), но не мог придумать другой способ заставить его работать.

Сгенерированный HTML-кодследующим образом:

<ul class="checkbox_list">
 <li><input name="sf_guard_user[permissions_list][]" type="checkbox" value="1" id="sf_guard_user_permissions_list_1" />&nbsp;<label for="sf_guard_user_permissions_list_1">Permission1</label></li>
 <li><input name="sf_guard_user[permissions_list][]" type="checkbox" value="2" id="sf_guard_user_permissions_list_2" />&nbsp;<label for="sf_guard_user_permissions_list_2">Permission2</label></li>
 <li><input name="sf_guard_user[permissions_list][]" type="checkbox" value="3" id="sf_guard_user_permissions_list_3" />&nbsp;<label for="sf_guard_user_permissions_list_3">Permission3</label></li>
 <li><input name="sf_guard_user[permissions_list][]" type="checkbox" value="4" id="sf_guard_user_permissions_list_4" />&nbsp;<label for="sf_guard_user_permissions_list_4">Permission4</label></li>
</ul>

Теперь мне нужно разделить разрешения на основании их префикса.Например, если бы у меня были разрешения с именами user_action1, user_action2, file_action1, file_action2, они бы отображались как:

User
checkbox  (custom label) Action One
checkbox                 Action Two

File
checkbox  (custom label) Action One
checkbox                 Action Two

, но я не знаю, с чего начать.Было бы легко, если бы был шаблон для редактирования, но, поскольку я имею дело с платформой Forms, я понимаю, что шаблоны создаются на лету - я могу видеть их в своей папке кеша symonfy.

Как мне поступить?

Я начал писать свой собственный класс sfWidgetFormDoctrineChoicePermission, который расширяет тот же класс, что и sfWidgetFormDoctrineChoice, но изо всех сил пытается правильно отредактировать функции рендеринга для желаемого результата.Это правильный способ выполнения этой работы?

Мне также нужно интегрировать мою модель sfGuardUserProfile в страницу редактирования пользователя (так же, как выше), я где-то читал, что редактирую файл generator.yml для плагина sfGuardUserмодуль и простое добавление имен полей из таблицы sfGuardUserProfile заставит его работать, но, к сожалению, это не так.

Ответы [ 2 ]

1 голос
/ 12 июня 2010

Прежде всего, никогда не редактируйте базовые классы.Тот, который вы хотите отредактировать:

lib / form / doctrine / sfDoctrineGuardPlugin / sfGuardUserForm.class.php

Отсюда вы можете переопределить виджет по умолчанию, вызвав:

$this->setWidget('permissions_list', new sfWidgetFormDoctrineChoice(array('multiple' => true, 'model' => 'sfGuardPermission', 'expanded' => true)));

Вы должны создать свой собственный виджет и расширить его с sfWidgetFormDoctrineChoice - это лучшее начало.По сути, он вернет html как строки php, которые будут отображены.Это достаточно просто, чтобы со временем разобраться.

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

$this->embedForm('profile', new sfGuardUserProfileForm($this->getObject->NAME_OF_PROFILE_RELATIONSHIP));

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

0 голосов
/ 23 августа 2010

Прежде всего, вы должны поместить новую configure() в UserAdmin форму (бэкэнд), а не обычного пользователя из (внешний интерфейс).

Тогда ваш configure() метод будет иметь новое объявление виджета:

$this->setWidget('permission_list', new sfWidgetFormDoctrineChoice(array(
'muliple' => true,   // this makes checkboxes (default=false=radio)
'model' => sfGuardPermission,
'expanded' => true   // changes from select menu -> radio or check (based on 'multiple' setting)
)));

Удачи:)

...