Namespaces

  • Nette
    • Application
    • Caching
    • Collections
    • Config
    • Forms
    • IO
    • Loaders
    • Mail
    • Reflection
    • Security
    • Templates
    • Web
  • None
  • PHP

Classes

  • AppForm
  • Application
  • CliRouter
  • Control
  • DownloadResponse
  • ForwardingResponse
  • JsonResponse
  • Link
  • MultiRouter
  • Presenter
  • PresenterComponent
  • PresenterLoader
  • PresenterRequest
  • RedirectingResponse
  • RenderResponse
  • Route
  • SimpleRouter

Interfaces

  • IPartiallyRenderable
  • IPresenter
  • IPresenterLoader
  • IPresenterResponse
  • IRenderable
  • IRouter
  • ISignalReceiver
  • IStatePersistent

Exceptions

  • AbortException
  • ApplicationException
  • BadRequestException
  • BadSignalException
  • ForbiddenRequestException
  • InvalidLinkException
  • InvalidPresenterException
  • Overview
  • Namespace
  • Class
  • Tree
  • Other releases
  1: <?php
  2: 
  3: /**
  4:  * This file is part of the Nette Framework (https://nette.org)
  5:  *
  6:  * Copyright (c) 2004 David Grudl (http://davidgrudl.com)
  7:  *
  8:  * For the full copyright and license information, please view
  9:  * the file license.txt that was distributed with this source code.
 10:  */
 11: 
 12: namespace Nette\Application;
 13: 
 14: use Nette;
 15: 
 16: 
 17: 
 18: /**
 19:  * Web form as presenter component.
 20:  *
 21:  * @author     David Grudl
 22:  *
 23:  * @property-read Presenter $presenter
 24:  */
 25: class AppForm extends Nette\Forms\Form implements ISignalReceiver
 26: {
 27: 
 28:     /**
 29:      * Application form constructor.
 30:      */
 31:     public function __construct(Nette\IComponentContainer $parent = NULL, $name = NULL)
 32:     {
 33:         parent::__construct();
 34:         $this->monitor('Nette\Application\Presenter');
 35:         if ($parent !== NULL) {
 36:             $parent->addComponent($this, $name);
 37:         }
 38:     }
 39: 
 40: 
 41: 
 42:     /**
 43:      * Returns the presenter where this component belongs to.
 44:      * @param  bool   throw exception if presenter doesn't exist?
 45:      * @return Presenter|NULL
 46:      */
 47:     public function getPresenter($need = TRUE)
 48:     {
 49:         return $this->lookup('Nette\Application\Presenter', $need);
 50:     }
 51: 
 52: 
 53: 
 54:     /**
 55:      * This method will be called when the component (or component's parent)
 56:      * becomes attached to a monitored object. Do not call this method yourself.
 57:      * @param  IComponent
 58:      * @return void
 59:      */
 60:     protected function attached($presenter)
 61:     {
 62:         if ($presenter instanceof Presenter) {
 63:             $name = $this->lookupPath('Nette\Application\Presenter');
 64: 
 65:             if (!isset($this->getElementPrototype()->id)) {
 66:                 $this->getElementPrototype()->id = 'frm-' . $name;
 67:             }
 68: 
 69:             $this->setAction(new Link(
 70:                 $presenter,
 71:                 $name . self::NAME_SEPARATOR . 'submit!',
 72:                 array()
 73:             ));
 74: 
 75:             // fill-in the form with HTTP data
 76:             if ($this->isSubmitted()) {
 77:                 foreach ($this->getControls() as $control) {
 78:                     $control->loadHttpData();
 79:                 }
 80:             }
 81:         }
 82:         parent::attached($presenter);
 83:     }
 84: 
 85: 
 86: 
 87:     /**
 88:      * Tells if the form is anchored.
 89:      * @return bool
 90:      */
 91:     public function isAnchored()
 92:     {
 93:         return (bool) $this->getPresenter(FALSE);
 94:     }
 95: 
 96: 
 97: 
 98:     /**
 99:      * Internal: receives submitted HTTP data.
100:      * @return array
101:      */
102:     protected function receiveHttpData()
103:     {
104:         $presenter = $this->getPresenter();
105:         if (!$presenter->isSignalReceiver($this, 'submit')) {
106:             return;
107:         }
108: 
109:         $isPost = $this->getMethod() === self::POST;
110:         $request = $presenter->getRequest();
111:         if ($request->isMethod('forward') || $request->isMethod('post') !== $isPost) {
112:             return;
113:         }
114: 
115:         if ($isPost) {
116:             return Nette\ArrayTools::mergeTree($request->getPost(), $request->getFiles());
117:         } else {
118:             return $request->getParams();
119:         }
120:     }
121: 
122: 
123: 
124:     /********************* interface ISignalReceiver ****************d*g**/
125: 
126: 
127: 
128:     /**
129:      * This method is called by presenter.
130:      * @param  string
131:      * @return void
132:      */
133:     public function signalReceived($signal)
134:     {
135:         if ($signal === 'submit') {
136:             $this->fireEvents();
137: 
138:         } else {
139:             throw new BadSignalException("There is no handler for signal '$signal' in {$this->reflection->name}.");
140:         }
141:     }
142: 
143: }
144: 
Nette Framework 0.9.7 API documentation generated by ApiGen 2.3.0