У меня есть следующий сценарий: есть приложение, которое может быть установлено самими клиентами, а не каждый веб-хост обеспечивает доступ к консоли, клиенты должны иметь возможность устанавливать и обновлять приложение через браузер. (По аналогии с процессом обновления данных, например, Piwik)Symfony: миграция таблицы пользователей через браузер
Выполнение команд в конкретных контроллеров не проблема:
// src/CoreBundle/Controller/UpdateController.php
public function updateAction()
{
$application = new Application($this->get('kernel'));
$application->setAutoExit(false);
$input = new ArrayInput(array(
'command' => 'doctrine:migrations:migrate',
'--no-interaction',
));
$output = new BufferedOutput();
$application->run($input, $output);
return $this->render('system/update.html.twig', [
'dump' => $output->fetch()
]);
}
В настоящее время этот маршрут можно отключить с помощью конфигурации таким образом, что не каждый пользователь приложения может начать но только администраторы. (В будущем доступ маршрута должен быть ограничен администратором счетов)
Проблемы вступает в игру при добавлении миграции для таблицы пользователя:
// app/Resources/DoctrineMigrations/Version20160926090600.php
public function up(Schema $schema)
{
$this->addSql('ALTER TABLE `user` ADD `gender` tinyint(1) unsigned NOT NULL DEFAULT 0');
}
Как только это поле добавлено к объекту пользователя, веб-доступ завершился неудачно, поскольку доктрина пытается извлечь данные из user.gender
, чтобы заполнить данные учетной записи для контекста сеанса/безопасности.
Есть ли способ обойти эту проблему? Можно ли отключить выборку данных из таблицы пользователей для определенного маршрута? Или еще лучше, так как последний не будет работать, если для доступа требуется /route
: Можно ли разрешить сеансовой обработке получать только несколько столбцов?
Или мне не нужно ничего менять в таблице пользователей, если мне нужно обрабатывать обновления через контроллеры?
Текущая security.yml
:
security:
providers:
appuser:
entity:
class: CoreBundle:User
firewalls:
default:
anonymous: ~
http_basic: ~
provider: appuser
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false