contributte/imagist nedaří se mi nasadit na projekt
- Alsatian
- Člen | 175
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 | 661
Ahoj,
- Ano vlastní add* metoda je lepší.
- 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 | 175
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)