Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

Diskusia – 3. diel - Cms v Nette a Doctrine 2 - Modely a Layout

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Avatar
Libi
Člen
Avatar
Libi:23.11.2015 16:52

Ahoj,
snazim se podle tutorialu seznamit s doctrine. Mam potiz s ladenkou:

Class or interface 'App\Presenter­s\UserEntity;' used in @var annotation at App\Presenter­s\BasePresenter::$u­serEntity not found. Check annotation and 'use' statements.

Base presenter:

use Nette;
use App\Model\Entities\User as UserEntity;
use App\Model\Facades\UserFacade;

/**
 * Base presenter for all application presenters.
 */
abstract class BasePresenter extends Nette\Application\UI\Presenter
{

    /** @persistent null|string */
    public $locale;

    /**
     * @var \Kdyby\Translation\Translator
     * @inject
     */
    public $translator;

    /**
     *
     * @var UserFacade
     * @inject
     */
    public $userFacade;

    /**
     *
     * @var UserEntity;
     * @inject
     */
    public $userEntity;


    /**
     * Translation macro
     * @inheritdoc
     */
    protected function createTemplate()
    {
        /** @var Template $template */
        $template = parent::createTemplate();
        $this->translator->createTemplateHelpers()
                ->register($template->getLatte());
        return $template;
    }

}

I netbeans mi tvrdi ze use statement s UserEntity neni v kodu pouzita.
Jedu na PHP 5.4.3.

User.php mam

namespace App\Model\Entities;

use Doctrine\ORM\Mapping as ORM;

/**
 * Doctrine entity for user table
 * @package App\Model\Entities
 * @ORM\Entity
 */
class User extends ORM\Mapping\MappedSuperclass
{
..
}

Kdyby\...\base­Entity je deprecated.

Nejak nevidim, v cem mam chybu, dik za nakopnuti (a vyborne napsany tutorial) :)

 
Odpovedať
23.11.2015 16:52
Avatar
Odpovedá na Libi
Martin Konečný (pavelco1998):23.11.2015 17:11

Ahoj,

po asi 5 minutovém koukání na ten kód jsem si všiml, že u anotace @var UserEntity; v BasePresenteru máš středník, který tam být nemá :D
Ono ti to hlásí i v té chybě společně s tím středníkem, ale těžko se toho dá všimnout.
Jinak by to snad mělo fungovat bez problému.

Odpovedať
23.11.2015 17:11
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Libi
Člen
Avatar
Libi:23.11.2015 21:59

Diky, to je presne chvile, kdy je lepsi od toho jit pryc a dat si pauzu, protoze i kdyby ten strednik byl pres pul obrazovky, nevsiml bych si ho :)

 
Odpovedať
23.11.2015 21:59
Avatar
Odpovedá na Libi
Martin Konečný (pavelco1998):23.11.2015 22:37

Taky jsem měl co dělat, abych si ho všiml :D

Odpovedať
23.11.2015 22:37
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Libi
Člen
Avatar
Libi:25.10.2016 21:22

Ahoj,

Všechny naše entity budou dědit od základní entity, vytvořené rozšířením Kdyby. Získá díky tomu některé příjemné funkce, např. nebudeme muset psát settery a gettery a místo toho budeme moci používat přímo $user->name.

Nemely by settery byt zapsany explicitne, minimalne pro osetreni vstupu? Stejne tak automaticke gettery - nekoliduje to s principem zapouzdreni, kdy pres gettery zpristupnim jen to, co ma byt pristupne?

 
Odpovedať
25.10.2016 21:22
Avatar
Odpovedá na Libi
Martin Konečný (pavelco1998):25.10.2016 22:27

ahoj,
díky těmto magickým funkcím se nám v podstatě jen zjednoduší psaní - pokud by sis udělal explicitně sette/getter, pak by např. $user->name = "Jméno" zavolalo $user->setName("Jméno").
Proto settery/gettery není nutné v tomto případě psát, pokud nám stačí vzít/uložit surovou hodnotu. Samozřejmě pokud bychom chtěli dělat nějakou validaci vstupu, pak je potřeba set metodu napsat.

Jedná se tedy jen o zkrácení zápisu, abys neměl hromadu funkcí, které buď jen něco uloží nebo vrátí (klasicky viz příklady u Symfony a Doctrine). Pokud chceš mít jistotu, že nepůjde použít nějaký atribut, který má být doslova privátní (tzn. nemít na něj ani getter), pak zřejmě bude vhodnější od základní Kdyby\BaseEntity nedědit.

Poznámka: v novější verzi Kdyby jsou tyto funkce v traitě Kdyby\Doctrine\En­tities\MagicAc­cessors, BaseEntity je zavrhnuta.

Odpovedať
25.10.2016 22:27
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
rurijs
Člen
Avatar
rurijs:6.11.2016 21:48

Ahoj,
dělal jsem vše podle návodu, no píše mi to:

User Deprecated
Nette\DI\State­ment::setEnti­ty is deprecated, change Statement object itself.

Nevíte co s tím?

 
Odpovedať
6.11.2016 21:48
Avatar
Odpovedá na rurijs
Martin Konečný (pavelco1998):6.11.2016 22:06

Ahoj,
můžeš přiložit screen z Laděnky?

Odpovedať
6.11.2016 22:06
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
rurijs
Člen
Avatar
Odpovedá na Martin Konečný (pavelco1998)
rurijs:6.11.2016 22:22

Už jsem to vyřešil (vzal jsem si composer z tohohle projektu, není tam totiž aktuální nette, atd), takže downgrade verzí.. a hláška zmizela.

 
Odpovedať
6.11.2016 22:22
Avatar
Odpovedá na Martin Konečný (pavelco1998)
Dominik Gavrecký:15.11.2016 19:51

Prečo si constructor nevytvoril v class-e BaseFacades, ktorou by si následne rozšíril každú Facade ?

/**
         * Sloupec pro datum registrace.
         * @ORM\Column(name="`registration_date`", type="datetime")
         */
        protected $registrationDate;

Prečo neurčuješ CURRENT_TIMESTAMP ?

Odpovedať
15.11.2016 19:51
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!