다음과 같은 시나리오가 있습니다. 클라이언트 자체에서 설치할 수있는 앱이 있으며 모든 웹 호스트가 콘솔 액세스를 제공하는 것은 아니므로 클라이언트는 브라우저를 통해 앱을 설치하고 업데이트 할 수 있어야합니다. 특정 컨트롤러에서 명령을 실행symfony : 브라우저를 통한 사용자 테이블의 마이그레이션
(예를 들어, 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');
}
, 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