ModelLoader v modulech nenajde své modely

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

Snažím se zprovoznit ModelLoader, problém je, že využívám moduly a modelLoader mi neumí najít potřebné modely.
pokud upravím řádek v ModelLoader.php

$class = 'Models\\' . ucfirst($name);

na

$class = 'PluginModule\Models\\' . ucfirst($name);

tak to funguje, budu to ovšem potřebovat i pro jiné moduly.

Podotýkám, že jsem začátečník…

Jak byste to řešili elegantně vy?

Melmen
Člen | 132
+
0
-

Já bych celou tu funkci šoupnul do BasePresenteru. Jelikož od něj všichni dědí.

ybznek
Člen | 10
+
0
-

Melmen
Jak to myslíš?

Melmen
Člen | 132
+
0
-

No aplikaci máš určitě rozdělenou nějak takhle:

App/
	presenters/
	models/
	templates/

		PluginModule/
			presenters/
			templates/
			models/

A funkci na loadování modelů máš někde v App/PluginModule/DefaultPresenter.php.
Stačí, když jí dáš do app/presenters/BasePresenter.php

davidm
Člen | 81
+
0
-

Třeba si můžeš zaregistrovat těch loaderů víc pro různá namespace. Stačí si ho upravit nějak takhle …

class ModelLoader extends ...
{
	private $namespace;

	public function __construct(Container $container, $namespace)
	{
		// .......

		$this->namespace = $namespace;
	}

	public function getModel($name)
	{
		// ...
		$class = $this->namespace . '\Models\\' . ucfirst($name);
		// ...
	}

a pak v config.neon

pluginLoader:
	class: ModelLoader
	arguments: [@container, 'PluginModule']

pageLoader:
	class: ModelLoader
	arguments: [@container, 'PageModule']
ybznek
Člen | 10
+
0
-

Využívám lib. ModelLoader.

<?php
//app/presenters/BasePresenter.php
 final public function getModels() {
        return $this->context->modelLoader;
    }
?>

ostatní presentery odvozuju od tohodle BasePresenteru a dělá to stejný problém; hledá to modely v tom app/models/

Editoval ybznek (20. 11. 2011 22:22)

JuniorJR
Člen | 181
+
0
-

ybznek napsal(a):

Využívám lib. ModelLoader.

<?php
//app/presenters/BasePresenter.php
 final public function getModels() {
        return $this->context->modelLoader;
    }
?>

ostatní presentery odvozuju od tohodle BasePresenteru a dělá to stejný problém; hledá to modely v tom app/models/

Samozřejmě, protože používáš jediný model loader. Řešením je zaregistrování dalších model loaderů, které budou mít nastaven vlastní namespace. Řešení ti napsal davidm o 1 příspěvěk výše.

Editoval JuniorJR (5. 12. 2011 13:55)

Fanda
Člen | 39
+
0
-

A nebo si model loader uprav tak, že bude na vstupu očekávat název modelu včetně namespace:

$class = '\\' . $name; // v parametru 'PluginModule\Models\ModelName'