Nettrine migration parametr z nette configu

tatyalien
Člen | 239
+
0
-

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
+
0
-

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
+
0
-

@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
+
0
-

@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 | 1186
+
+1
-

@MichalHlávka @tatyalien Injectovani ma hlaseny bug, pokud se spousti jenom s jednou migraci.

https://github.com/…ns/issues/22

tatyalien
Člen | 239
+
0
-

Felix napsal(a):

@MichalHlávka @tatyalien Injectovani ma hlaseny bug, pokud se spousti jenom s jednou migraci.

https://github.com/…ns/issues/22

Díky za info :)