无法进入前置方法
来源:10-2 前置方法
须尽欢csw
2018-01-26
lass Address extends Controller { //权限验证属性 protected $beforeActionList=[ 'checkScope'=>['only'=>'createOrUpdate'] ]; /** * 验证用户权限 */ protected function checkScope(){ //获取用户权限 $scope=TokenService::getValue('scope'); if ($scope) { if ($scope>ScopeEnum::User) { return true; } } else { throw new Exception("用户权限不够,太特么sorry了!"); } } public function createOrUpdate() { //验证数据 $validate=new AddressValidate(); $validate->goCheck(); //通过令牌获取用户id $uid=TokenService::getValue('uid'); /*根据uid来查找用户数据,判断用户是否存在,如果不存在抛出异常*/ $user=User::get($uid); if (!$user) { throw new Exception('用户不存在'); } //获取用户从客户端提交的地址 $dataArray=input('post.'); $dataArray=$validate->getDataPost($dataArray); /**判断更新或添加地址**/ $userAddress=$user->address; //添加地址 if (!$userAddress) { $user->address()->save($dataArray); } //更新地址 else { $user->address->save($dataArray); } return '成功添加地址!'; /**判断更新或添加地址结束**/ }
无法进入前置方法,只有把createOrUpdate的方法名,改成一个单词,才能顺利进入前置操作
写回答
3回答
-
ColorfulC
2018-07-10
估计是咱俩的tp版本一样。我也遇到了相同的问题。
断点调试跟了一下tp5源码。你说的改成一个单词才能进入前置操作的原因是:我们定义的方法名是小驼峰,而tp5的request->action()把请求的方法自动转化为了小写。但是$beforeActionList属性中我们写的是小驼峰,所以把我们定义的属性转换成小写就行了。改了一下源码。截图如下。
10 -
静秋叶
2018-12-13
P驼峰,我也遇到这个问题,前置方法,好像只能识别小写,比如'checkPrimaryscope' => ['only' => 'createorupdateaddress'],要是用驼峰就不行了,这是老师给我们埋的惊喜?哈哈哈
00 -
7七月
2018-01-26
什么叫改成一个单词?
032018-01-29
相似问题