При использовании плагина 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" /> <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" /> <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" /> <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" /> <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 заставит его работать, но, к сожалению, это не так.