úprava cesty do template složky v url

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

Dobrý den, mám verzi PHP5.3 a Nette2.0

Na své administrační stránce
http://test.dev/admin/

se mi načte template
app/AdminModule/templates/Default/default.latte

<a href="{plink InzeratyEdit}">inzeráty</a>

po kliknutí na odkaz mě to přesměruje na url: test.dev/admin/default/inzeraty-edit
a vyhodí chybu

Nette\Application\BadRequestException #404
Page not found. Missing template '…/AdminModule/templates/Default/inzeratyEdit.latte'.

můj presenter vypadá takto
app/AdminModule/presenters/InzeratyEditPresenter.php

<?php
class InzeratyEditPresenter extends BasePresenter {

}

a přiřazený template
app/AdminModule/templates/InzeratyEdit/default.latte

{block content}
editace inzeratu...

bootstrap.php

$router = $application->getRouter();
$router[] = $adminRouter = new MultiRouter('Admin');
$adminRouter[] = new Route('admin/<presenter>/<action>', 'Default:default');

$router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');

šlo by nějak upravit, pravděpodobně routování v bootstrap.php, abych nemusel mít všechny administrační šablony v Default/ složce, ale ve složkách pojmenovaných po svém presenteru ?

a druhá otázka.. je to dobrý nápad? Podle mě, ikdyž tam bude více složek tak to bude jednodušší na zorientování zvlášť, když frontend je řešený podobným způsobem. Děkuji

dakota
Člen | 148
+
0
-

Správne by si mal použiť:

<a href="{link InzeratyEdit:}">inzeráty</a>

prípadne

<a href="{link :Admin:InzeratyEdit:}">inzeráty</a>

dokumentácia – https://doc.nette.org/…n/presenters

Editoval dakota (22. 2. 2011 15:23)

muflix
Člen | 92
+
0
-

Aha děkuju, ale pokuď přidám

<a href="{link InzeratyEdit}">inzeráty</a>

tak to odkazuje stejně jako plink
a pokuď tam dám

<a href="{link InzeratyEdit:}">inzeráty</a>

tak mi to vyhodí chybu

Ambiguous class 'Acl\Security\Acl' resolution; defined in C:\web\www\test.dev\libs\Acl\Security\Acl.php and in C:\web\www\test.dev\libs\acl\security\acl.php.

tak nevim?:x

edit: aha.. tak nefunguje ani

<a href="{link :Admin:InzeratyEdit:}">inzeráty</a>

edit2:
v acl.php mam

<?php

namespace Acl\Security;

use Nette\Security\Permission;

class Acl extends Permission
{
    public function __construct()
    {
        // roles
        $this->addRole('guest');
        $this->addRole('member', 'guest');
        $this->addRole('editor', 'member');
        $this->addRole('admin');

        // resources
        $this->addResource('Admin:Default');
        $this->addResource('Admin:Page');
        $this->addResource('Admin:User');

        // privileges
        $this->allow('member', 'Admin:Default', Permission::ALL);
        $this->allow('editor', 'Admin:Page', Permission::ALL);
        $this->allow('admin', Permission::ALL, Permission::ALL);
    }
}

a za admina jsem přihlášen, takže práva bych měl mít.

edit3:
přidal jsem do acl.php ještě

$this->addResource('Admin:InzeratyEdit');

ale nepomohlo to.

Editoval muflix (22. 2. 2011 15:37)

jasir
Člen | 746
+
0
-

muflix napsal(a):

a pokuď tam dám

<a href="{link InzeratyEdit:}">inzeráty</a>

tak mi to vyhodí chybu

Ambiguous class 'Acl\Security\Acl' resolution; defined in C:\web\www\test.dev\libs\Acl\Security\Acl.php and in C:\web\www\test.dev\libs\acl\security\acl.php.

dakota radí správně. Smaž si adresář acl nebo Acl, máš to tam 2×.

Editoval jasir (22. 2. 2011 15:43)

muflix
Člen | 92
+
0
-

měl jsem tam
Acl/Security/Acl.php
žádná jiná složka či soubor tam nebyl.

nicméně jsem to přejmenoval na
AclSets/Security/Acl.php

a upravil jsem config.ini

service.Nette-Security-IAuthorizator  = AclSets\Security\Acl
service.Nette-Security-IAuthenticator = UsersModel

potom soubor acl.php

namespace AclSets\Security;

a promazal cache složku

a chyba už zmizela..
v odkaz na inzerát se mi, ale do href tagu vygenerovalo

error: Cannot load presenter 'Admin:InzeratyEdit', class 'AdminModule\InzeratyEditPresenter' was not found in 'C:\web\www\test.dev\www/../app/AdminModule/presenters/InzeratyEditPresenter.php'.

přitom tam, ale
app/AdminModule/presenters/InzeratyEditPresenter.php mám

<?php
class InzeratyEditPresenter extends BasePresenter {

}
dakota
Člen | 148
+
0
-

Uprav to na:

namespace AdminModule;

class InzeratyEditPresenter extends \BasePresenter {

}

Editoval dakota (22. 2. 2011 16:36)

muflix
Člen | 92
+
0
-

už to funguje díky moc, dokonce tam to lomítko ani nemusí být.
ale super teď konečně můžu začít testovat pravomoce :-))
ještě jednou díky :)