ITnetwork summer 2020 C# týden
30 % bodů zdarma na online výuku díky naší Slevové akci!
Pouze tento týden sleva až 80 % na e-learning týkající se C#

Diskuze: Registrace nestatické funkce továrny do configu

Aktivity (1)
Avatar
Ondřej Pech
Člen
Avatar
Ondřej Pech:22.2.2019 9:42

Ahopj, mám asi hloupej dotaz ale řeším oprávnění v nette aplikaci. Oprávnění potřebuju tahat z DB, jdu posle manuálu kde je popsáno toto:

<?php
namespace App\Model;

class AuthorizatorFactory
{
    /**
     * @return Nette\Security\Permission
     */
    public static function create()
    {
        $acl = new Nette\Security\Permission;

        // pokud chceme, můžeme role a zdroje načíst z databáze
        $acl->addRole('admin');
        $acl->addRole('guest');

        $acl->addResource('backend');

        $acl->allow('admin', 'backend');
        $acl->deny('guest', 'backend');

        // případ A: role admin má menší váhu než role guest
        $acl->addRole('john', ['admin', 'guest']);
        $acl->isAllowed('john', 'backend'); // false

        // případ B: role admin má větší váhu než guest
        $acl->addRole('mary', ['guest', 'admin']);
        $acl->isAllowed('mary', 'backend'); // true

        return $acl;
    }
}

A následně to mám zaregistrovat jako službu:

services:
    # třídu Permission vytvoříme metodou create třídy AuthorizatorFactory
    - App\Model\AuthorizatorFactory::create

A můj dotaz zní. Jak to zaregistrovat když nebudu chtít funkci create jako static? Protože potřebuju přistupovat k DI databázi a pod. a potřebuju použít $this->database ... což ve static funkci pochopitelně nejde.

 
Odpovědět
22.2.2019 9:42
Avatar
Odpovídá na Ondřej Pech
Honza Prosecký:22.2.2019 14:48

Bez ::create a pak klasicky vyzadani pres treba constructor, DI to vyresolvuje. Samozrejme musis zmenit z public static function na public function

 
Nahoru Odpovědět
22.2.2019 14:48
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Roman Havránek:17.3.2019 20:41

Proč je tato metoda static, když potřebuješ jiný objekt?

Pokud chceš ve Factorce přistupovat k objektu Nette/Context ($this->database), musíš si jí vytáhnout a vykonstruovat v konstruktoru této factory, nebo předat z volaného namespace.

Nahoru Odpovědět
17.3.2019 20:41
sleep();
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.