Cookie
基于WebApplication的Cookie实例
通过profile.php的cookie配置。
Cookie的实例获取
为了保持Model的无状态模式,禁止在模型层调用Cookie;
// 支持参数注入和自动注解
// controller
/**
* @autowired 自动注入
*/
protected HttpCookie $lang;
/**
* 参数注入
*/
public function __construct(HttpCookie $cookie)
{
...
}
/**
* @autowired 自动注入
*/
public function cookie(HttpCookie $cookie)
{
...
}
// 也可通过别名调用
public function getCookieByAlias(ContainerInterface $container)
{
return $container->get('app.cookie');
}
Cookie 的使用
// get
// COOKIE="name=tinyphp"
echo $cookie['name'];
// output "tinyphp";
// set
$cookie['name'] = "tinyphp1";
echo $cookie['name'];
// output "tinyphp1";
// 复杂的使用方式
$cookie->set("name", "tinyphp", "tinyphp.org");
Cookie 在Application内的实例化
通过Application中的容器定义源 Tiny\MVC\Application\ApplicationProvider自动加载入容器。
namespace Tiny\MVC\Application;
class ApplicationProvider implements DefinitionProviderInterface
{
/**
* 获取HttpCookie的实例定义
*
* @return \Tiny\DI\Definition\CallableDefinition
*/
protected function getCookieDefinition()
{
// Web环境下才有Cookie
if (!$this->app instanceof WebApplication) {
return;
}
return new CallableDefinition(HttpCookie::class, function (Properties $prop) {
$config = (array)$prop['cookie'];
// 引入全局变量$_COOKIE进行初始化。
$config['data'] = $_COOKIE;
return new HttpCookie($config);
});
}
}
Cookie在profile.php内的配置项
/**
* HTTP COOKIE设置
*
* 仅在web环境下生效
*
* cookie.domain
* 默认的cookie生效域名
*
* cookie.path
* 默认的cookie生效路径
*
* cookie.expires
* 默认的cookie过期时间
*
* cookie.prefix
* 默认的cookie前缀
*
* cookie.encode
* cookie是否编码
*/
$profile['cookie']['domain'] = '';
$profile['cookie']['path'] = '/';
$profile['cookie']['expires'] = 3600;
$profile['cookie']['prefix'] = '';
$profile['cookie']['encode'] = false;