Jak se připojit k db v komponente

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

Prosím o pomoc,mám samostatnou komponentu v app/komponent/ a potřebuji v ní ukládat a mazat data v db ale nejsem schopen se v ní připojit k db, v presenteru používám:

private $connection;

function __construct(Nette\Database\Connection $connection)
{
$this->connection = $connection;
}
a normálně to funguje ale když to samé přidám do komponenty tak mi to vyhodi "__construct() must be an instance of App\Nette\Database\Connection, none given,"a nevim co s tím?? a když se snažím vytvořit instanci tak tu třídu vúbec nenajde takže otázka jak mám vytvořit připojení k db v samostatné komponentě?
Diky za rady

David Matějka
Moderator | 6445
+
0
-
  1. komponentu mas v namespace App, v konstruktoru nepouzivas FQN ani nemas Nette v importech, dej tedy do konstruktoru pred nazev tridy \
  2. aby se o autowiring postaralo nette, musis si na komponentu vytvorit tovarnicku, v nette 2.1 nasledovne:
namespace App;

interface FooFactory
{
	/**
	* @return Foo
	*/
	public function create();
}

registrujes v configu:

services:
	- App\FooFactory

a v presenteru injectnes a pouzijes

class BarPresenter extends BasePresenter
{
	/**
	* @var \App\FooFactory
	* @inject
	*/
	public $fooFactory;

	public function createComponentFoo()
	{
		$foo = $this->fooFactory->create();

		return $foo;
	}
}
marcelxy
Člen | 70
+
0
-

Diky za odpověd, ale vidím že to je celé nad moje síly na toto bych nepřišel ani náhodou prosím kde k tomuto existuje nějaká podrobnější dokumentace nebo návod nebo příklady? existuje k tomu nějaká knížka? já bych se to rád naučil ale nevim z čeho? to co se se tu píše v dokumentaci je srozumitené a dostatečné možná pro vás ale ne pro začatečníka! je to nadherný nástroj ale já nevím z čeho se to mám naučit jako začatečník? nic méně jsem to udělal přesně tak a odpověd je
„Please check a @return annotation of the App\FooFactory::create() method. Class ‚App\Foo‘ cannot be found“
s tim se potýkám neustále že nic nemúže najít! at tu class dám kdekoliv nevím jak ho přimět aby to co chci našel a používal? potřebuji využívat VisualPaginator stejna písnička „class VisualPaginator cannot be found“ at ho dám kdekoliv!! opravdo neví co stím jak nato?
ještě jednou dík za trpělivost

David Matějka
Moderator | 6445
+
0
-

App\Foo byl jen ukazkovy nazev, samozrejme to nahrad za nazev tvoji tridy :)

na zacatek doporucuju projit quickstart

k tomu, kam nahravat tridy: v nette je robotloader, ktery proleza definovane adresare a hleda v nich tridy. VisualPaginator tedy nahraj kamkoliv, kde na nej uvidi robot loader

kdyz nevis, zkus se stavit do jabber mistnosti pokud tam bude nekdo aktivni, muzes problem vyresit rychlejc…