jorry2008
http://www.bootcss.com/p/bootstrap-datetimepicker/
http://www.runoob.com/jqueryui/example-datepicker.html
做程序,文档都不去看。。。。。。。。。。。。。。。通过你的截图可以看出,yong 提供的方法,能更好的解决你的问题,这个最好由js来解决,放php里会增加不少代码,比如你提交入库失败返回时,那个格式又得重新格式化
- jorry2008 赞了回答
在yii1版本中并没有这个特性,yii.js中全局绑定了ajax的请求,并自动添加了一些属性比如:
function initCsrfHandler() { // automatically send CSRF token for all AJAX requests $.ajaxPrefilter(function (options, originalOptions, xhr) { if (!options.crossDomain && pub.getCsrfParam()) { xhr.setRequestHeader('X-CSRF-Token', pub.getCsrfToken()); } }); pub.refreshCsrfToken(); }
然后验证时,多了一个方法:
public function validateCsrfToken($token = null) { $method = $this->getMethod(); // only validate CSRF token on non-"safe" methods http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.1.1 if (!$this->enableCsrfValidation || in_array($method, ['GET', 'HEAD', 'OPTIONS'], true)) { return true; } $trueToken = $this->loadCsrfToken(); if ($token !== null) { return $this->validateCsrfTokenInternal($token, $trueToken); } else { return $this->validateCsrfTokenInternal($this->getBodyParam($this->csrfParam), $trueToken) || $this->validateCsrfTokenInternal($this->getCsrfTokenFromHeader(), $trueToken); } }
即:$this->validateCsrfTokenInternal($this->getCsrfTokenFromHeader(), $trueToken);中的$this->getCsrfTokenFromHeader()
所以可以肯定的是,在框架内使用jquery的ajax可以不用带csrf相关参数
在yii1版本中并没有这个特性,yii.js中全局绑定了ajax的请求,并自动添加了一些属性比如:
function initCsrfHandler() { // automatically send CSRF token for all AJAX requests $.ajaxPrefilter(function (options, originalOptions, xhr) { if (!options.crossDomain && pub.getCsrfParam()) { xhr.setRequestHeader('X-CSRF-Token', pub.getCsrfToken()); } }); pub.refreshCsrfToken(); }
然后验证时,多了一个方法:
public function validateCsrfToken($token = null) { $method = $this->getMethod(); // only validate CSRF token on non-"safe" methods http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.1.1 if (!$this->enableCsrfValidation || in_array($method, ['GET', 'HEAD', 'OPTIONS'], true)) { return true; } $trueToken = $this->loadCsrfToken(); if ($token !== null) { return $this->validateCsrfTokenInternal($token, $trueToken); } else { return $this->validateCsrfTokenInternal($this->getBodyParam($this->csrfParam), $trueToken) || $this->validateCsrfTokenInternal($this->getCsrfTokenFromHeader(), $trueToken); } }
即:$this->validateCsrfTokenInternal($this->getCsrfTokenFromHeader(), $trueToken);中的$this->getCsrfTokenFromHeader()
所以可以肯定的是,在框架内使用jquery的ajax可以不用带csrf相关参数
- jorry2008 赞了回答
应该是不会自动带上
x-csrf-token
这个头信息的吧.你遇到的过
带
和不带
的情况, 都是一样的请求方式么?都是自己手写的
ajax
? 而不是用的框架带的js
库(比如yii.activeForm.js
)里面的方法发起的请求?如果方便的话 请提供多一些信息.
Yii::$app->request->cookies
和Yii::$app->response->cookies
在 Yii 里面是分开的,前者是客户端(浏览器cookie),后者是服务器端。
所以:Yii::$app->request->cookies //主要负责读取 Yii::$app->response->cookies //主要负责创建
当然两者可以混用,但是根据业务需要,
取客户端cookie之前,在响应中应该写入或修改
如果两者分不清或者使用错误,那就是程序不OOP
思想不到位