Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony:通过浏览器迁移用户表_Php_Symfony_Doctrine Migrations - Fatal编程技术网

Php Symfony:通过浏览器迁移用户表

Php Symfony:通过浏览器迁移用户表,php,symfony,doctrine-migrations,Php,Symfony,Doctrine Migrations,我有以下场景:有一个应用程序可以由客户端自己安装,由于不是每个webhoster都提供控制台访问,客户端必须能够通过浏览器安装和更新该应用程序。(类似于Piwik的更新过程) 在特定控制器中执行命令没有问题: // src/CoreBundle/Controller/UpdateController.php public function updateAction() { $application = new Application($this->get('kernel'));

我有以下场景:有一个应用程序可以由客户端自己安装,由于不是每个webhoster都提供控制台访问,客户端必须能够通过浏览器安装和更新该应用程序。(类似于Piwik的更新过程)

在特定控制器中执行命令没有问题:

// 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');
}
一旦将此字段添加到用户实体,web访问就会失败,因为doctrine试图从
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

因为似乎没有人有一个好的解决方案,我必须禁用这个特定路由的完整防火墙。这仅在不使用身份验证的情况下有效(例如,对于管理员帐户):


因为似乎没有人有一个好的解决方案,我必须禁用这个特定路由的完整防火墙。这仅在不使用身份验证的情况下有效(例如,对于管理员帐户):

security:
  firewalls:
    setup:
      pattern:  ^/(update|install)
      security: false