ajax, input ve formuláři, výpis z DB

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

Ahoj, s nette začínám. Potřebuji toto.

Mám FORM a v něm input, do inputu zadám číslo (id z DB) a vedle formu potřebuji vypsat hodnotu z db.

Bohužel vůbec netuším jak na to.

Děkuji za každou radu.

Oli
Člen | 1215
+
0
-

Uděláš to zhruba takhle:

<input id="idInputu" />{snippet someSnippet}{$info}{/snippet}
$.ajax({
  type: "POST",
  url: {link idFromDb!},
  data: { id: $('#idInputu').val() }
})

V presenteru potom něco jako

public function handleIdFromDb()
{
	$id = $this->httpRequest->post('id');
	$this->template->info = $this->model->getById($id);
	$this->redrawControl('someSnippet');
}
plzurq
Člen | 3
+
0
-
public function handleIdFromDb() {
      dump($id);
      $id = $this->httpRequest->post('id');
      $this->template->info = $id;//$this->cityRepository->findByZip($id);
      $this->redrawControl('someSnippet');
  }

nic se nedumpuje. Požadavek se posílá po každém stisku klávesy?

konzola:

exception 'Nette\MemberAccessException' with message 'Cannot read an undeclared property App\HomepagePresenter::$httpRequest.' in C:\xampp\htdocs\plyn\vendor\nette\nette\Nette\common\ObjectMixin.php:154
Stack trace:
#0 C:\xampp\htdocs\plyn\vendor\nette\nette\Nette\common\Object.php(123): Nette\ObjectMixin::get(Object(App\HomepagePresenter), 'httpRequest')
#1 C:\xampp\htdocs\plyn\app\presenters\HomepagePresenter.php(105): Nette\Object->__get('httpRequest')
#2 [internal function]: App\HomepagePresenter->handleIdFromDb()
#3 C:\xampp\htdocs\plyn\vendor\nette\nette\Nette\Application\UI\PresenterComponent.php(90): ReflectionMethod->invokeArgs(Object(App\HomepagePresenter), Array)
#4 C:\xampp\htdocs\plyn\vendor\nette\nette\Nette\Application\UI\PresenterComponent.php(259): Nette\Application\UI\PresenterComponent->tryCall('handleidFromDb', Array)
#5 C:\xampp\htdocs\plyn\vendor\nette\nette\Nette\Application\UI\Presenter.php(320): Nette\Application\UI\PresenterComponent->signalReceived('idFromDb')
#6 C:\xampp\htdocs\plyn\vendor\nette\nette\Nette\Application\UI\Presenter.php(203): Nette\Application\UI\Presenter->processSignal()
#7 C:\xampp\htdocs\plyn\vendor\nette\nette\Nette\Application\Application.php(149): Nette\Application\UI\Presenter->run(Object(Nette\Application\Request))
#8 C:\xampp\htdocs\plyn\vendor\nette\nette\Nette\Application\Application.php(88): Nette\Application\Application->processRequest(Object(Nette\Application\Request))
#9 C:\xampp\htdocs\plyn\www\index.php(8): Nette\Application\Application->run()
#10 {main}
(stored in C:\xampp\htdocs\plyn\log\exception-2014-03-24-20-45-28-374e68affbd32f9ac85eedffcd741153.html

Editoval plzurq (24. 3. 2014 20:48)

Oli
Člen | 1215
+
0
-

nic se ti dumpnout nemuze. Ze dvou duvodu:

  1. Protoze se vraci JSON a pokud to co vraci obsahuje dump, tak to ani nefunguje. Misto dump tam dej
	$this->payload->dump = $id;
  1. protoze dumpujes $id pred tim, nez ho vytvoris.

Kdy se to vpise nevim, to si musis implementovat v tom jQuery.

PS. psal jsem to z hlavy, mozna to neni uplne presne. cemuz by odpovidala i ta chybova hlaska v consoli. Kdy to bude spravne tak v consoli bude napr: dump = 2

akadlec
Člen | 1326
+
0
-

Tak pokud chceš použít $this->httpRequest tak si tam tu proměnnou musíš předa v konstruktoru a nebo injecnout, sama od sebe se tam neobjeví.

Oli
Člen | 1215
+
0
-

Sama od sebe se v presenteru objeví ne? Ale mas pravdu, spravne to je getHttpRequest(). Myslel jsem, ze presenter dedi od Nette/Object a ze to najde pomocí tý property.

Editoval Oli (24. 3. 2014 23:27)

Jiří Nápravník
Člen | 710
+
0
-

Presenter dedi od Nette\Object, jako snad vsechny tridy. Nicmene pres $this->httpRequest to nejde z toho duvodu, ze $httpRequest je private…

Oli
Člen | 1215
+
0
-

No to by neměl být ten důvod. Když použiju svou třídu, která dědí od Nette\Object, tak se k private atributům dostanu:

class MyClass extends \Nette\Object
{
	/** @var \Repository\OrganizerRepository */
	private $organizerRepository;

	/**
	 *
	 * @return \Repository\OrganizerRepository
	 */
	public function getOrganizerRepository()
	{
		return $this->organizerRepository;
	}
}

// presenter
$this->myClass->organizerRepository->getAll();

Spíš mě napadá to, že getHttpRquest je protected a to by mohl být ten důvod…

Jiří Nápravník
Člen | 710
+
0
-

Jo tady je to jasný, protože na tu třídu saháš zvenku. Já měl za to, ale že když jsi v POTOMKU, tak se prvně podívá jeslti není ten atribut nastaven a pak teprve hledá gettery. Ale teď jsem odzkoušel a není to tak, takže máš pavdu nejspíše ty s protected method