contributte/imagist nedaří se mi nasadit na projekt

Alsatian
Člen | 163
+
0
-

Ahoj. Moc se mi líbil WebChemistry
Ten je nyní ale Deprecated a jeho další vývoj vypadá, že je ukončen…

Přímo v projektu je odkaz na „bohatší“ balíček pracující s obrázky (využívám ve spojení s Nettrine) a to Contributte/Imagist

Nějak se mi jej ale nedaří rozjet. Chápu správně, že si „musím“ pro přidání do formuláře přidat funkci addImageUpload dle návodu, že se se nepřidá sama?

Chtěl jsem dále přidat do formuláře k výběru obrázku „Upload with preview“, co mám ale udělat s tímto kódem?

assert($imagePreviewFactory instanceof Contributte\Imagist\Bridge\Nette\Form\Preview\ImagePreviewFactoryInterface); // inject

A nepřišel jsem na to, jak uložit obrázek z formuláře do databáze. Pomůže někdo, prosím? :)

Popřípadě prosím poraďte, jaký Image Storage v souvislosti s Nettrine použít… Díky moc.

Editoval Alsatian (25. 11. 2022 13:59)

Martk
Člen | 651
+
0
-

Ahoj,

  1. Ano vlastní add* metoda je lepší.
  2. Jsou dva způsoby:

(lepší)

	public function __construct(
		private ImagePreviewFactoryInterface $imagePreviewFactory,
	)
	{
	}

	$form->addImageUpload('image', 'Obrázek')->setPreview($this->imagePreviewFactory->create());

nebo

$form->addImageUpload('image', 'Obrázek')->setPreview(new ImagePreview($this->linkGenerator));

3. Metoda resolve vyřeší za tebe jak odstraňovaní tak i nahrávání. Ale můžeš i manuálně.

$image = $values['image']->resolve($this->imageStorage); // bude buď null nebo PersistentImageInterface

a na převod do string / null můžeš použít službu DatabaseConverterInterface

$string = $this->databaseConverter->convertToDatabase($image);

saveToDatabase($string);

Editoval Martk (27. 11. 2022 9:14)

Alsatian
Člen | 163
+
0
-

Ahoj @Martk.
Moc děkuji za odpověď. Prozatím jsem nepostoupil nikam.

Zpracovávám formulář a rád bych uložil do databáze (doctrine) obrázek „image“.

EditFormFactory.php

	/** @var Contributte\Imagist\Storage\ImageStorage */
	private $imageStorage;
	/** předám si dále pomocí kontruktoru...

Následně jsem chtěl tedy obrázek uložit pomocí tvého

$image = $values['image']->resolve($this->imageStorage);

Dostávám chybu: Service of type App\AdminModule\Forms\Page\EditFormFactory: Service of type Contributte\Imagist\Storage\ImageStorage required by $imageStorage in EditFormFactory::__construct() not found. Did you add it to configuration file?

Proč mám něco někde přidávat do config souboru? Provedl jsem registraci extension pomocí:

extensions:
  imagist: Contributte\Imagist\Bridge\Nette\DI\ImageStorageExtension

Škoda, že není v dokumentaci projektu uvedený jednoduchý (funkční) příklad, jak data z formuláře zachytit a uložit. Nalézám neúplné střípky a těžko se někam posouvám :) Určitě moje chyba, ale nevěřím, že jsem jediný…

Mrknu ještě na nasazení preview, snad alespoň tohle už pojede :)

Tak podobná chyba… Pokus o nasazení Preview na tlačítko pro upload ve formuláři skončil stejně jako předchozí pokus.
„Service of type App\AdminModule\Forms\Page\EditFormFactory: Service of type Contributte\Imagist\Bridge\Nette\Form\Preview\ImagePreviewFactoryInterface required by $imagePreviewFactory in EditFormFactory::__construct() not found. Did you add it to configuration file?“

Editoval Alsatian (27. 11. 2022 16:12)

Martk
Člen | 651
+
0
-

Měl by se injectnout ImageStorageInterface. Aha, myslel jsem, že je to registrované jako služba, podívám se na to, můžeš použít ten druhý způsob. Je pravda, že dokumentace by chtěla dost vylepšit.