Jak začít a propojit Doctrine a Nette Framework
Znáte to, všude slyšíte, jak je ta Doctrine úžasná, jenže pak se někam kouknete a na první pohled to vypadá moc komplikovaně, tak odsouváte vyzkoušení a díky tomu u vás roste i pomyslná zeď mezi vámi a technologií. Naštěstí jsem včera byl na NetteFwPivo kde jsme se chvilku o Doctrine bavili a tak jsem si řekl, že to rovnou zkusím a výsledek byl pro mě překvapující, nejen že to bylo snadné, ale zárověn magické :) a zde je popis jak jsme postupovali krok za krokem.
Nebojte se a vyzkoušejte si to také, stihnete to do 4minut ;-)
Nainstaluji si Nette/Sandbox
composer create-project nette/sandbox my-app
cd my-app
chmod 777 log temp
Nainstaluji Kdyby/Doctrine
composer require kdyby/doctrine
Vytvořím si databázi a uživatele
1
CREATE DATABASE `doctrine_devel` COLLATE 'utf8_czech_ci';
2
CREATE USER 'doctrine'@'localhost' IDENTIFIED BY 'kreslo';
3
GRANT USAGE ON * . * TO 'doctrine'@'localhost' IDENTIFIED BY 'kreslo' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
4
GRANT ALL PRIVILEGES ON `doctrine\_%` . * TO 'doctrine'@'localhost';
5
FLUSH PRIVILEGES;
Copied!
Nastavím připojení a zaregistruji Doctrine do Nette Framework
do config.neon přidám
1
extensions:
2
console: Kdyby\Console\DI\ConsoleExtension
3
events: Kdyby\Events\DI\EventsExtension
4
annotations: Kdyby\Annotations\DI\AnnotationsExtension
5
doctrine: Kdyby\Doctrine\DI\OrmExtension
6
7
doctrine:
8
user: doctrine
9
password: '***'
10
dbname: doctrine_online
11
metadata:
12
App: %appDir%
Copied!
a v config.local.neon přidám lokální přístup do databáze
1
doctrine:
2
user: doctrine
3
password: kreslo
4
dbname: doctrine_devel
Copied!
vytvořím si podle dokumentace Kdyby\Doctrine první entitu
app/model/Article.php
1
namespace App;
2
3
use Doctrine\ORM\Mapping as ORM;
4
5
/**
6
* @ORM\Entity
7
*/
8
class Article extends \Kdyby\Doctrine\Entities\BaseEntity
9
{
10
11
/**
12
* @ORM\Id
13
* @ORM\Column(type="integer")
14
* @ORM\GeneratedValue
15
*/
16
protected $id;
17
18
/**
19
* @ORM\Column(type="string")
20
*/
21
protected $title;
22
23
}
Copied!
V konzoli si vyzkouším zdali funguje Doctrine console
php ./www/index.php
a vytvořím databázovou tabulku
php ./www/index.php orm:schema-tool:create
Naplním tabulku daty a zkusím se k nim dostat pomocí Doctrine v presenteru.
Injectnu si EntityManager do presenteru a dumpnu si všechny články.
HomepagePresenter.php
1
<?php
2
3
namespace App\Presenters;
4
5
use App\Article;
6
use Nette,
7
App\Model;
8
9
10
/**
11
* Homepage presenter.
12
*/
13
class HomepagePresenter extends BasePresenter
14
{
15
16
/**
17
* @inject
18
* @var \Kdyby\Doctrine\EntityManager
19
*/
20
public $EntityManager;
21
22
public function renderDefault()
23
{
24
$dao = $this->EntityManager->getRepository(Article::getClassName());
25
dump($dao->findAll());
26
exit();
27
}
28
29
}
Copied!
A jelikož vše funguje pošlu entity do šablony a vypíšu je
1
public function renderDefault()
2
{
3
$dao = $this->EntityManager->getRepository(Article::getClassName());
4
// dump($dao->findAll());exit();
5
$this->template->articles = $dao->findAll();
6
}
Copied!
Homepage.latte
1
{* This is the welcome page, you can delete it *}
2
3
{block content}
4
5
{foreach $articles as $article}
6
7
{$article->title}<br>
8
9
{/foreach}
Copied!
Tradááá.
Strach z nového překonán, vše se zdá krásně snadné a super. Další krok bude výroba servisy Articles ať nejsme za hulváta.
Díky Davidovi, že mi pomohl překonat mentální blok vyzkoušet Doctrine a Filipovi za úžasnou práci na Kdyby/Doctrine.
Last modified 11mo ago
Copy link