Nechce načíst HomePresenter v AdminModule

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

Našel jsem to tady asi 10× ve foru, vyzkušel jsem různé varianty, ale prostě mi to pořád hlásí chybu:

Cannot load presenter 'Admin:Homepage', class 'App\AdminModule\Presenters\HomepagePresenter' was not found.

Adresářová struktura je:

app/
	AdminModule/ <-- Obsahuje presentery pro admina
		presenters/
			HomepagePresenter.php
			BasePresenter.php
        	templates/

	presenters/  <-- Obsahuje presentery pro veřejnost (přímo v adresáři app)
		HomepagePresenter.php
		BasePresenter.php
		templates/

Homepage presenter v adminovi vypadá takto:

<?php

namespace AdminModule;

use Nette;
use App\Model;

class HomepagePresenter extends BasePresenter
{

	private $database;

	public function __construct(Nette\Database\Context $database)
	{
		$this->database = $database;
	}

	public function renderDefault()
	{
	}

}

A BasePresenter v adminovi takto:

<?php

namespace AdminModule;

use Nette;
use App\Model;


/**
 * Base presenter for all application presenters.
 */
abstract class BasePresenter extends Nette\Application\UI\Presenter
{
  /** @persistent */
  public $locale;

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

}

Routování takto:

<?php

namespace App;

use Nette;
use Nette\Application\Routers\RouteList;
use Nette\Application\Routers\Route;


class RouterFactory
{

	/**
	 * @return Nette\Application\IRouter
	 */
	public static function createRouter()
	{
		$router = new RouteList;

		$admin = new RouteList('Admin');
		$admin[] = new Route('admin/<presenter>/<action>[/<id>]', 'Homepage:default');

		$router[] = $admin;

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

		return $router;
	}

}

Domovská stránka jede úplně v pořádku, chyba nastane, když jdu do odkazu /admin

Mimochodem, zkoušel jsem i promazat temp.

Editoval emmil (8. 1. 2016 16:29)

David Matějka
Moderator | 6445
+
0
-

prevod nazvu presenteru na tridu se resi pomoci mapovani, v sandboxu a web-projectu je upraveny na tohle a proto to hleda ten presenter jinde, nez ho mas. Takze bud prepis namespace u presenteru, aby korespondoval s mapovanim, nebo mapovani uprav asi nasledovne:

	mapping:
		*: *Module\*Presenter

a takhle myslim vypada defaultni mapovani, takze by melo stacit to uplne smazat :)

jeste to neni mergnuty do dokumentace, ale dalsi info najdes tady: https://github.com/…senters.texy#…

emmil
Člen | 26
+
+1
-

Prvně mockrát díky za extrémně rychlou reakci. Za druhé, přepsání mappingu na tebou navrhované řešení funguje skvěle.

Takže díky moc! Už mě z toho bolela hlava.

EDIT: Funguje to skvěle pro AdminModule, ale pro ty presentery, které jsou přímo ve složce app to už háže chybu. Takže jsem akorát ty veřejné presentery přehodil do FrontModule a přepsal routing a zase to krásně funguje.

Editoval emmil (8. 1. 2016 16:47)