NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 6 - Jednoduchý redakční systém v Nette - Výpis článku

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
danhosek
Člen
Avatar
danhosek:24.3.2016 23:53

Mám stále problém vytvořit podstránku reference. Dělám to stejně jako články (article) a stále se mit o nedaří. momentálně pod URL: /reference se mi to zřejmě zacyklí :

Stránka www.danielhosek.cz nefunguje

Web www.danielhosek.cz vás přesměroval příliš mnohokrát.
ERR_TOO_MANY_RE­DIRECTS

u RS v OOP PHP to nebyl problém takto upravit: nahradit slovem article -> reference.
založil jsem příslušnou tabulku v DB ale nejsem si jistý, zda je problém v přesměrování, nebo jinde. DĚKUJI.

 
Odpovědět
24.3.2016 23:53
Avatar
Odpovídá na danhosek
Dominik Gavrecký:24.3.2016 23:57

Posli sem tvoju routu a ReferencePresenter

Editováno 24.3.2016 23:59
Odpovědět
24.3.2016 23:57
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
danhosek
Člen
Avatar
Odpovídá na Dominik Gavrecký
danhosek:25.3.2016 0:33

Do RouterFactory jsem doplnil
$router[] = new Route('[<acti­on>/][<url>]', array(
'presenter' => 'Core:Reference',
'action' => array(
Route::VALUE => 'default',
Route::FILTER_TABLE => array(
// řetězec v URL => akce presenteru
'reference' => 'list',
'editor' => 'editor',
'odstranit' => 'remove'
),
Route::FILTER_STRICT => true
),
'url' => null,
));
$router[] = new Route('[<url>]', 'Core:Referen­ce:default');
return $router;

a ReferencePresenter:
<?php

/*
Anotace

*/

namespace App\CoreModule\Pre­senters;

use App\CoreModule\Mo­del\Reference­Manager;
use Nette\Applica­tion\BadReques­tException;
use Nette\Applica­tion\UI\Form;
use Nette\Database\U­niqueConstrain­tViolationExcep­tion;
use Nette\Utils\A­rrayHash;

/**
* Zpracovává práci s články.
* @package App\CoreModule\Pre­senters
*/
class ReferencePresenter extends BaseCorePresenter
{
/** @var ArticleManager Instance třídy modelu pro práci s články. */
protected $referenceManager;

/**
* Konstruktor s injektovaným modelem pro práci s články.
* @param ArticleManager $articleManager automaticky injektovaná třída modelu pro práci s články
*/
public function __construct(Re­ferenceManager $referenceManager)
{
parent::__con­struct();
$this->referenceManager = $referenceManager;
}

/** Načte a vykreslí článek článek do šablony podle jeho URL.
* @param string $url URL článku
* @throws BadRequestException Jestliže článek s danou URL nebyl nalezen.
*/

/** Vykreslí seznam článků do šablony. */
public function renderList()
{
$this->template->reference = $this->referenceManager->getReferences();
}

/**
* Odstraní článek.
* @param string $url
*/
public function actionRemove($url)
{
$this->referenceManager->removeReeren­ce($url);
$this->flashMessage('Člá­nek byl úspěšně odstraněn.');
$this->redirect(':Co­re:Reference:lis­t');
}

/**
* Vykresluje editaci článku podle jeho URL.
* @param string $url URL adresa článku, který editujeme, pokud není zadána, vytvoří se nový
*/
public function actionEditor($url)
{
// Pokud byla zadána URL, pokusí se článek načíst a předat jeho hodnoty do editačního formuláře, jinak vypíše chybovou hlášku.
if ($url) ($reference = $this->referenceManager->getReference($ur­l)) ? $this['editorForm']->setDefaults($re­ference) : $this->flashMessage('Re­ference nebyla nalezena.');
}

/**
* Vrátí formulář pro editor článků.
* @return Form formulář pro editor článků
*/
protected function createComponen­tEditorForm()
{
$form = new Form;
$form->addHidden('re­ference_id');
$form->addText('title', 'Titulek')->setRequired();
$form->addText('url', 'URL')->setRequired();
$form->addText('des­cription', 'Popisek')->setRequired();
$form->addTextArea('con­tent', 'Obsah');
$form->addSubmit('sub­mit', 'Uložit referenci');
$form->onSuccess[] = [$this, 'editorFormSuc­ceeded'];
return $form;
}

/**
* Funkce se vykonaná při úspěsném odeslání formuláře; zpracuje hodnoty formuláře.
* @param Form $form formulář editoru
* @param ArrayHash $values odeslané hodnoty formuláře
*/
public function editorFormSuc­ceeded($form, $values)
{
try {
$this->referenceManager->saveReference($va­lues);
$this->flashMessage('Re­ference byla úspěšně uložena.');
$this->redirect(':Co­re:Reference:', $values->url);
} catch (UniqueConstra­intViolationEx­ception $ex) {
$this->flashMessage('Re­ference s touto URL adresou již existuje.');
}
}
}

 
Odpovědět
25.3.2016 0:33
Avatar
danhosek
Člen
Avatar
danhosek:25.3.2016 16:52

momentálně mám na calý web error 500 a v logu:
[2016-03-25 16-40-35] Nette\Invalid­StateException: Resource 'Core:Reference' does not exist. in /data/web/vir­tuals/101955/vir­tual/www/vendor/net­te/security/src/Se­curity/Permis­sion.php:300 @ http://www.danielhosek.cz/ @@ exception-2016-03-25-16-40-24-f41e44703c313­accfae587ddfbd951­e1.html

i když je v routeFactory přidaný stějně jako'Core:Article

 
Odpovědět
25.3.2016 16:52
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovídá na danhosek
Jindřich Máca:25.3.2016 16:55

Ahoj, to je chyba způsobená tím, že jsi sice do routování přidal nový zdroj, ale ve statickém ACL jsi mu nenastavil žádná práva, potažmo jsi ho tam vůbec neuvedl. V našem případě zápisu ověřování práv totiž aplikace vyžaduje, aby každý zdroj byl registrován v rámci ACL, jinak právě začne vyhazovat tuto výjimku. :)

 
Odpovědět
25.3.2016 16:55
Avatar
danhosek
Člen
Avatar
Odpovídá na Jindřich Máca
danhosek:25.3.2016 17:38

Do confin.neon jsem reference přidal.
Nebo je třeba ACL oprávnění přidat ještě jinam?

#  _____ _______         _                      _
# |_   _|__   __|       | |                    | |
#   | |    | |_ __   ___| |___      _____  _ __| | __  ___ ____
#   | |    | | '_ \ / _ \ __\ \ /\ / / _ \| '__| |/ / / __|_  /
#  _| |_   | | | | |  __/ |_ \ V  V / (_) | |  |   < | (__ / /
# |_____|  |_|_| |_|\___|\__| \_/\_/ \___/|_|  |_|\_(_)___/___|
#                                _
#              ___ ___ ___ _____|_|_ _ _____
#             | . |  _| -_|     | | | |     |  LICENCE
#             |  _|_| |___|_|_|_|_|___|_|_|_|
#             |_|
#
# IT ZPRAVODAJSTVÍ  <>  PROGRAMOVÁNÍ  <>  HW A SW  <>  KOMUNITA
#
# Tento zdrojový kód je součástí výukových seriálů na
# IT sociální síti WWW.ITNETWORK.CZ
#
# Kód spadá pod licenci prémiového obsahu a vznikl díky podpoře
# našich členů. Je určen pouze pro osobní užití a nesmí být šířen.
#
# Konfigurační soubor pro CoreModule.

parameters:
        # Presentery.
        administration: Core:Administration
        article: Core:Article
        reference: Core:Reference
        contact: Core:Contact

# Nastavení vlastních služeb dále přístupných pomocí DI v rámci CoreModule.
services:
        security.authorizator: # Nastavení zdrojů a pravidel přístupu k nim v rámci CoreModule pomocí statického ACL.
                setup:
                        - addResource(%administration%)
                        - addResource(%article%)
                        - addResource(%contact%)
                        - App\CoreModule\Model\ReferenceManager
                        - allow(%guest%, %administration%, 'login')
                        - allow(%guest%, %administration%, 'register')
                        - allow(%guest%, %article%, 'default')
                        - allow(%guest%, %article%, 'list')
                        - allow(%guest%, %reference%, 'default')
                        - allow(%guest%, %reference%, 'list')
                        - allow(%guest%, %contact%)
                        - allow(%member%, %administration%, 'default')
                        - allow(%member%, %administration%, 'logout')


        # Nastavení dalších služeb v rámci CoreModule dále přístupných pomocí DI.
        - App\CoreModule\Model\ArticleManager
        - App\CoreModule\Model\ReferenceManager
 
Odpovědět
25.3.2016 17:38
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovídá na danhosek
Jindřich Máca:25.3.2016 18:49

V setupu služby authorizator jsi na něj nepoužil metodu addResource() a tím pádem není zaregistrovaný jako zdroj. Ta definice pod parametry je jenom pomocná zkratka pro Tebe. ;-)

 
Odpovědět
25.3.2016 18:49
Avatar
danhosek
Člen
Avatar
Odpovídá na Jindřich Máca
danhosek:25.3.2016 19:29

našel jsem tu chybu před chvílí, když jsem to upravoval celé znovu a opatrněji. ted mi web jede, ale /reference/ stále nefunguje. Přesměrováno na /chyba.
v @layout.latte:
<li><a n:href=":Core:Ar­ticle:list">Sez­nam článků</a></li>
<li><a n:href=":Core:Re­ference:list">Re­ference</a></li>
HTML:

<li><a href="/seznam-clanku/">Seznam článků</a></li>
<li><a href="#">Refe­rence</a></li>

Jak je tohle možné?

 
Odpovědět
25.3.2016 19:29
Avatar
danhosek
Člen
Avatar
Odpovídá na danhosek
danhosek:25.3.2016 19:33
<li><a href="/seznam-clanku/">Seznam článků</a></li>
<li><a href="#">Reference</a></li>
 
Odpovědět
25.3.2016 19:33
Avatar
danhosek
Člen
Avatar
Odpovídá na Jindřich Máca
danhosek:26.3.2016 0:39

pokud mi to nevytvořilo ani odkaz v menu, nefunguje mi routování v aplikaci že? zkontroloval jsem app/ComeModule/con­fig/config.ne­on i app/router/ RouterFactory.php a vše vypadá, že je vporádku. Ale není...

 
Odpovědět
26.3.2016 0:39
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 10 zpráv z 105.