Nettrine migration parametr z nette configu
- tatyalien
- Člen | 239
Ahoj,
snažím se v Netrrine DB migraci načíst Nette DI Container ale nedaří se
mě na něj dostat jinak než že si ho ručně zavolám přes
$container = Bootstrap::boot()
->createContainer();
Nettrine mám rozjetý v configu:
extensions:
console: Contributte\Console\DI\ConsoleExtension(%consoleMode%)
nettrine.annotations: Nettrine\Annotations\DI\AnnotationsExtension
nettrine.cache: Nettrine\Cache\DI\CacheExtension
nettrine.dbal: Nettrine\DBAL\DI\DbalExtension
nettrine.dbal.console: Nettrine\DBAL\DI\DbalConsoleExtension(%consoleMode%)
nettrine.orm: Nettrine\ORM\DI\OrmExtension
nettrine.orm.annotations: Nettrine\ORM\DI\OrmAnnotationsExtension
nettrine.orm.console: Nettrine\ORM\DI\OrmConsoleExtension(%consoleMode%)
nettrine.orm.cache: Nettrine\ORM\DI\OrmCacheExtension
migrations: Nettrine\Migrations\DI\MigrationsExtension
nettrine.dbal:
debug:
panel: %debugMode%
sourcePaths:
- %appDir%/src/
connection:
....
nettrine.annotations:
debug: %debugMode%
ignore: [group]
nettrine.orm.annotations:
namespaces:
- App\src
paths:
- %appDir%/src/
excludePaths: []
migrations:
table: doctrine_migrations
column: version
directory: %appDir%/../migrations
namespace: Migrations
console:
catchExceptions: true
autoExit: true
lazy: true
v návodu jsem se dočetl, že by migrace měli podporovat @inject,
ale ten se mě tady nepodařilo rozjet…
Můžete mě někdo správně nasměrovat jak ve vygenerované migraci využít
buď container, nebo jen jeho parameters?
Zkoušel jsem:
final class Version20200628093936 extends AbstractMigration
{
/**
* @var Container
* @inject
*/
public $container;
public function injectContainer(Container $container): void
{
$this->container = $container;
}
public function setContainer(Container $container): void
{
$this->container = $container;
}
- Mistrfilda
- Člen | 76
Ahoj,
na aktualni verzi nettrine/migrations jsem to zkusil ciste takto a funguje mi to. Vypise se mi tempDir. Zkus smazat ty inject metody a nechat ciste inject anotaci. Pokud nepomuze, dostavas nejake errory?
final class Version20200628212645 extends AbstractMigration
{
/**
* @var \Nette\DI\Container
* @inject
*/
public $container;
public function up(Schema $schema) : void
{
echo $this->container->getParameters()['tempDir'];
die();
}
public function down(Schema $schema) : void
{
}
}
Ja se snazim co nejvice vyhnout injectovani containeru takto naprimo, pokud jsem spravne pochopil, tak potrebujes ziskat hodnotu ze sekce parameters v configu? Pokud ano, udelal bych si jednoduchou service, kterou bych si v configu zaregistroval a pote do migrace injectnul namisto containeru. Napr. takto
namespace App;
class MigrationParameters
{
/**
* @var string
*/
private $tempDir;
public function __construct(string $tempDir)
{
$this->tempDir = $tempDir;
}
public function getTempDir(): string
{
return $this->tempDir;
}
}
services:
- App\MigrationParameters(%tempDir%)
- tatyalien
- Člen | 239
@Mistrfilda: tak to tvoje mě jede… ale jen pokud spouštím migrace všechny, pokud si hraju přes příkaz
bin/console migrations:execute 20200628093936 --up
tak zde to nejede a na tom jsem včera vlastně pohořel.
Pokud spustím
bin/console migrations:migrate
tak zde ten inject fachá… takže nefunguje jen při volání migrations:execute jak pro up, tak down :(
- tatyalien
- Člen | 239
@MichalHlávka :
příkaz
bin/console migrations:migrate
spustí https://github.com/…guration.php
vyvolává to
vendor/doctrine/migrations/lib/Doctrine/Migrations/Migrator.php:92
public function migrate(
?string $to = null,
?MigratorConfiguration $migratorConfiguration = null
)
ale volání přes execute nejde přes nettrine ale spouští přímo doctrine migraci
- spustí se symfony konzole
- Symfony\Component\Console\Input\ArgvInput má parametr na migraci
- získaná verze z Doctrine\Migrations\MigratorConfiguration
Editoval tatyalien (29. 6. 2020 12:16)
- Felix
- Nette Core | 1245
@MichalHlávka @tatyalien Injectovani ma hlaseny bug, pokud se spousti jenom s jednou migraci.
- tatyalien
- Člen | 239
Felix napsal(a):
@MichalHlávka @tatyalien Injectovani ma hlaseny bug, pokud se spousti jenom s jednou migraci.
Díky za info :)