Správný postup při práci s komponentou

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Gustav
Člen | 16
+
0
-

Dobrý den vespolek,

spatlal jsem si takovej menší příklad na komponentu, ale vím že je to špatný postup, toho jak to provádím, proto bych někoho poprosil o zvalidování následujících kódu, nebo alespoň o nasměrování.

GalleryControl.php

<?php
class GalleryControl extends \Nette\Application\UI\Control
{
        private $gallery;
        private $galf;
        private $images;

        function __construct(GalleryFascade $galf)
        {
                parent::__construct();
                $this->galf = $galf;
        }


        function render($id, $type = 1)
        {
                $this->template->setFile(__DIR__ . '/../templates/controls/GalleryControl.latte');
                $this->template->data = $this->galf->getGallery($id);
                $this->template->type = $type;
                $this->template->images = $this->galf->getGalleryImages($id);
                $this->template->render();
        }
}
?>

ClanekPresenter.php

<?php

...

protected function createComponentGalerie($id)
        {
                $data = new \GalleryControl(new \GalleryFascade($this->presenter->context->dibi->connection, $this->presenter->context->tf));
                return $data;
        }

?>

config.neon

# SECURITY WARNING: it is CRITICAL that this file & directory are NOT accessible directly via a web browser!
#
# If you don't protect this directory from direct web access, anybody will be able to see your passwords.
# https://nette.org/en/security-warning


common:
        dibi:
                host: localhost
                username: root
                password:
                database: db
                lazy: TRUE

        parameters:

        nette:
                database:
                        default:
                                dsn: 'mysql:dbname=db'
                                user: root
                                password:

                session:
                        expiration: 14 days


        php:
                date.timezone: Europe/Prague

        services:
                uf: UsersFascade
                af: ArticleFascade
                cf: CommentsFascade
                templateFactory: FrontModule\TemplateFactory(@nette.templateCacheStorage, ...)
                authenticator: Authenticator


production < common:


development < common:

Jde mi především tedy o to používání DIBI, s tím jsem si moc nesedl, děkuji předem všem.

Jan Tvrdík
Nette guru | 2595
+
0
-

GalleryFascade by měla být definována jako služba v configu, jinak mi to připadá v pořádku.

Ještě: $this->presenter nemá v presenterech moc smysl používat.

Gustav
Člen | 16
+
0
-

Velice si vážím odpovědi, děkuji.

Jak bych měl přístupovat k instanci dibi když ne přes $this->presenter?

Jan Tvrdík
Nette guru | 2595
+
0
-

ClanekPresenter.php

protected function createComponentGalerie($id)
{
    return new \GalleryControl($this->context->gf);
}

config.neon

services:
	gf: GalleryFascade
	...
Gustav
Člen | 16
+
0
-

Áha, taková chybička, super, děkuji Ti.

duke
Člen | 650
+
0
-

Jinak správně anglicky je to Facade a ne Fascade…