/** * Constructor * * @param object An optional KConfig object with configuration options */ public function __construct(KConfig $config) { parent::__construct($config); if (strpos(KRequest::protocol(), 'http') !== false) { $this->registerCallback('before.read', array($this, 'setReferrer')); $this->registerCallback('after.save', array($this, 'unsetReferrer')); $this->registerCallback('after.cancel', array($this, 'unsetReferrer')); } $this->registerCallback('after.read', array($this, 'lockResource')); $this->registerCallback('after.save', array($this, 'unlockResource')); $this->registerCallback('after.cancel', array($this, 'unlockResource')); //Set the default redirect. $this->setRedirect(KRequest::referrer()); }
/** * Set a variable in the request. Cookies and session data are stored persistently. * * @param mixed Variable identifier, prefixed by hash name eg post.foo.bar * @param mixed Variable value */ public static function set($identifier, $value) { list($hash, $keys) = self::_parseIdentifier($identifier); // Add to _REQUEST hash if original hash is get, post, or cookies if (in_array($hash, array('GET', 'POST', 'COOKIE'))) { self::set('request.' . implode('.', $keys), $value); } // Store cookies persistently if ($hash == 'COOKIE' && strpos(KRequest::protocol(), 'http') !== false) { // rewrite the $keys as foo[bar][bar] $ckeys = $keys; // get a copy $name = array_shift($ckeys); foreach ($ckeys as $ckey) { $name .= '[' . $ckey . ']'; } if (!setcookie($name, $value)) { throw new KRequestException("Couldn't set cookie, headers already sent."); } } // Store in $GLOBALS foreach (array_reverse($keys, true) as $key) { $value = array($key => $value); } // Add the global if it's doesn't exist if (!isset($GLOBALS['_' . $hash])) { $GLOBALS['_' . $hash] = array(); } $GLOBALS['_' . $hash] = KHelperArray::merge($GLOBALS['_' . $hash], $value); }
/** * Push the controller data into the document * * This function divert the standard behavior and will push specific controller data * into the document * * @return mixed */ protected function _actionRender(KCommandContext $context) { //Headers if ($context->headers) { foreach ($context->headers as $name => $value) { header($name . ' : ' . $value); } } //Status if ($context->status) { header(KHttpResponse::getHeader($context->status, KRequest::protocol())); } if (is_string($context->result)) { return $context->result; } }