Zend Framework 2-Концепция Cookie
Я много занимался серфингом. Я хотел бы назначить и получить значение с помощью COOKIE. Как я могу сделать в ZF2? Я видел много примеров присвоения значения в cookie. Пожалуйста, объясните, как получить значение из куки.
2 ответов
файл cookie в HTTP (см. RFC 2109 просто что-то хранится в запрос и отправить каждый раз, когда делается запрос. Ответ можете добавить другие параметры, которые будут сохранены в дополнение к уже существующим cookies.
Итак, печенье поиска осуществляется через Request, to обновление cookie вы используете Response. В соответствии с RFC 2109 вы используете соответственно  и . Вы можете таким образом прямой доступ к этим заголовкам через
$this->getRequest()->getHeaders()->get('Cookie')->foo = 'bar';
или установить cookies через:
$this->getResponse()->getHeaders()->get('Set-Cookie')->foo = 'bar';
вещи сделаны немного проще, хотя, потому что есть прокси-сервер по запросу и ответ на прямой доступ к cookie:
public function fooAction()
{
  $param = $this->getRequest()->getCookie()->bar;
  $this->getResponse()->getCookie()->baz = 'bat';
}
имейте в виду Cookie и Set-Cookie заголовки реализации . Взгляните в классе на Github для всех доступных методов.
небольшое резюме:
$cookie = $this->getResponse()->getCookie();
$cookie->foo = 'bar';
$cookie->baz = 'bat';
$this->setDomain('www.example.com');
$this->setExpires(time()+60*60*24*30);
доступ к cookie через $this->getResponse()->getCookie() работает, но многословен и утомителен. Итак, что я сделал, я расширил классы ответов и запросов. Вот как это выглядит например:
'service_manager' => array (
    'factories' => array (
        'Request' => 'Application\Mvc\Request\Factory',
        'Response' => 'Application\Mvc\Response\Factory',
    )
);
модуль / применение / src / применение/Mvc / запрос / Фабрика.в PHP
namespace Application\Mvc\Request;
use Zend\Console\Request as ConsoleRequest;
use Zend\Console\Console;
use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
class Factory implements FactoryInterface
{
    public function createService (ServiceLocatorInterface $serviceLocator)
    {
        if (Console::isConsole ())
        {
            return new ConsoleRequest ();
        }
        return new HttpRequest ();
    }
}
модуль/применение/ГНЦ/приложения/MVC, о/запрос/класса HttpRequest.в PHP
namespace Application\Mvc\Request;
use Zend\Http\PhpEnvironment\Request;
class HttpRequest extends Request
{
    public function hasCookie ($name)
    {
        assert ('is_string($name)');
        $cookie = $this->getCookie();
        if (empty ($cookie))
        {
            return false;
        }
        if (isset ($cookie [$name]))
        {
            return true;
        }
        return false;
    }
    public function cookie ($name, $default = null)
    {
        assert ('is_string($name)');
        if ($this->hasCookie($name))
        {
            $cookie = $this->getCookie();
            return $cookie [$name];
        }
        return $default;
    }
}
модуль / применение / src / применение/Mvc / ответ / Фабрика.в PHP
namespace Application\Mvc\Response;
use Zend\Console\Response as ConsoleResponse;
use Zend\Console\Console;
use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
class Factory implements FactoryInterface
{
    public function createService (ServiceLocatorInterface $serviceLocator)
    {
        if (Console::isConsole ())
        {
            return new ConsoleResponse ();
        }
        return new HttpResponse ();
    }
}
модуль/применение/ГНЦ/приложения/в MVC/ответ/объект HttpResponse.в PHP
namespace Application\Mvc\Response;
use Zend\Http\PhpEnvironment\Response;
use Zend\Http\Header\SetCookie;
class HttpResponse extends Response
{
    public function addCookie ($name, $value, $expires = null, $path = null, $domain = null, $secure = false, $httponly = false, $maxAge = null, $version = null)
    {
        $cookie = new SetCookie ($name, $value, $expires, $path, $domain, $secure, $httponly, $maxAge, $version);
        $this->getHeaders ()
            ->addHeader ($cookie);
    }
}
теперь мне гораздо проще получить доступ к cookies.
$this->getRequest ()->cookie ('ptime');
$this->getRequest ()->cookie ('alarm', 'last');
и
$this->getResponse ()->addCookie ('ptime', time ());
