6把刀

6把刀

这家伙有点懒,还没写个性签名!

  • 财富值610
  • 威望值80
  • 总积分2020

个人信息

  • '' => 'options'不生效是因为设置了'controller' => 'v1/user',这样,如果使用OPTIONS访问 v1/users/abc的时候。会报404,看来这是只针对当前users的url,并不支持users下边的比如users/abc这种路径的访问。
    最终改为'' => 'options'
    就你理解的我一一给你理下。看看你能理解多少
    1.
    '' => 'options'不生效是因为设置了'controller' => 'v1/user'这是错误的理解
    '' => 'options' 的意思是当前设置的controller空路由时他的options访问可以到哪个位置,相当于
    options www.xxx.com/users 他options走的是actions里面的options独立方法

    2.
    如果使用OPTIONS访问 v1/users/abc的时候。会报404,
    这是因为options 访问 www.xxx.com/user/abc 你是没有配置过任何options的,你可以在你的chrome的请求头部看到信息
    你只要给他配置起来就行比如:我这里加点料,我怕你理解错,我加点。这个/user/abc他需要post请求那写法如下
    'POST abc' => 'abc',
    'OPTIONS abc' => 'options

    3.最终改为'《action》' => 'options'
    说有问题是因为你统一了路由,这种写法,在与我们写路由来说,是不规范的,路由就是有什么写什么,最小化标准,会让你更快的定位问题。比如 www.xxx.com/users/12 这样你的options就又走不通了。是不是得'/' => 'options'了呢,不能说你写错,只能说你思想不对。就得'OPTIONS users/' => 'options'

    一定要去看YII2他的路由创建原理是怎么实现的,看源代码

    而你以上的理解错误是因为
    你写在patterns里,他的意思是替换原有路由
    patterns 或 extraPatterns 重新定义现有的模式或添加此规则支持的新模式

  • 回复了 的回答

    http://www.yiichina.com/doc/api/2.0/yii-filters-cors
    看看这里介绍,希望能帮到你

    他的问题并不是CORS的问题,而是浏览器发起XHR时会先发起一个options请求。这是浏览器发起的。而YII的路由没有设置这种请求options v1/user/abc所以会出现404错误。
    而楼主所做的做法也是不对的。并没有明白起原理。只是解决他现在出的问题,而不知道他这种写法是错误的。

  • http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html
    先理解上文。我再简说。能听懂几分看造化了。
    用户访问www.xxx.com 系统先去判定是否有已经登陆过。可以是session等。
    如果没有登陆就发起微信网页授权。授权成功后,微信会访问你指定的一个连接比如www.xxx.com/login?access=kdkdkdkdkdk
    而这login就是处理登陆的东西。而拿到这个access后,所要做的东西,比如拿到openid等,那就看
    https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842

  • 回复了 的回答

    打印head头里面有木有数据

    建一个BaseCongtroller.php这个为基类,在这个基类的behaviors里去处理这个循序与过滤器,不要在main里面去配置。基它类都继承这个基类就OK

  • 你这个问题有个很好的解决方法就是上传图片是一个单独的控制器,比如点击上传图片后,他会给这个input付上一个图片地址的url,而不是一个fileinput,判定字符处理更好,之后那个单独的上传方法里面去上做上传逻辑,这样可以集中管理上传操作,这对与比如阿里云的OSS还是更换一些上传的云都很方便 这里你可以看看github https://github.com/bailangzhan/yii2-webuploader 这里说的是缩略图,还有一个就是编辑内容的图片上传,比如单上传还是多图上传,原理一样。

    另一个方案就是你定义rule是不为空。
    第一次添加不为空会提示,关健再update时,他会给这个image付上空字符串
    这里处理也是多种方式,比如你可以直接在控制器里给保存前给一个$oldimage付一个值,之后再判定有没有上传文件,没有就把这个老的图片保留重新付给 $model->image

    这是在控制器里操作的,你还可以把他简化到 Model里,复写save()方法,判定getIsNewRecord是就是插入,否就是更新,再把处理图片的逻辑写在这。

    代码就不写了,主要写逻辑思路。

  • RESTful API是大家遵循的规则,这样开发者,与使用开发者可以省很多事。
    大家都讲本地方言,很多人听不懂,来个世界语言多好,但是没有规定一定要干嘛。

  • 回复了 的回答

    打印head头里面有木有数据

    查看behaviors的数组,行为是从上往下执行的。你可以更改数组的顺序达到你要的

  • 回复了 的回答

    如果你是APACHE服务器的话可以尝试在conf文件见里面配置header 试一下

    Header always set Access-Control-Allow-Origin "*"
    Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS,DELETE"
    Header always set Access-Control-Allow-Credentials "true"
    Header always set Access-Control-Allow-Headers "Authorization,DNT,User-Agent,Keep-Alive,Content-Type,accept,origin,X-Requested-With"
    

    然后在我API认证的时候去除了对OPTIONS的请求的验证

     if (Yii::$app->getRequest()->getMethod() !== 'OPTIONS') {
         ....
     }
    

    你可以尝试这样配置下。另外就是我还做了一下将OPTIONS的请求都返回了200,让前端省去判断这个请求的返回结果。
    是在.htacess里面写的rewrite:

    RewriteCond %{REQUEST_METHOD} OPTIONS
    RewriteRule ^(.*)$ $1 [R=200,L]
    

    如果有需要你可以试试

    因为Yii2+vue2 他回碰到常规问题就是cors 与 auth AUTH与cors有先后问题。还有看options你直接查看auth下的optionAction,CORS知识面有点广。不是一两句可以说清,你追踪YII的处理方式

  • 回复了 的回答

    如果你是APACHE服务器的话可以尝试在conf文件见里面配置header 试一下

    Header always set Access-Control-Allow-Origin "*"
    Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS,DELETE"
    Header always set Access-Control-Allow-Credentials "true"
    Header always set Access-Control-Allow-Headers "Authorization,DNT,User-Agent,Keep-Alive,Content-Type,accept,origin,X-Requested-With"
    

    然后在我API认证的时候去除了对OPTIONS的请求的验证

     if (Yii::$app->getRequest()->getMethod() !== 'OPTIONS') {
         ....
     }
    

    你可以尝试这样配置下。另外就是我还做了一下将OPTIONS的请求都返回了200,让前端省去判断这个请求的返回结果。
    是在.htacess里面写的rewrite:

    RewriteCond %{REQUEST_METHOD} OPTIONS
    RewriteRule ^(.*)$ $1 [R=200,L]
    

    如果有需要你可以试试

    手机竟然没发在下面富文本出发回复。醉了。我今天就有像解决所有未解决问题的冲动。楼主我介意从XHR 跨域 options cors,还有在控制器里打印所有behaviors 并查看执行顺序。比如过CORS前是否有AUTH授权验证。

  • 回复了 的回答

    这个可以用到yii2.0场景

    手机回复你思路吧,现在很难得上来回复。你可以在Model beforvalidata 处判断model是否是inster 判断是否有文件用yii web uploadfile 的获取file实例。 如不明白。我后天上班后给你具体的解决方案。最优方案

总监 等级规则
2020/5000
资料完整度
10/100
用户活跃度
0/100

Ta的关注

0

Ta的粉丝

8

Ta的访客

28