无法进入前置方法

来源: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属性中我们写的是小驼峰,所以把我们定义的属性转换成小写就行了。改了一下源码。截图如下。

//img.mukewang.com/szimg/5b44385f00014f7512680461.jpg//img.mukewang.com/szimg/5b443860000112d111200529.jpg


1
0

静秋叶

2018-12-13

P驼峰,我也遇到这个问题,前置方法,好像只能识别小写,比如'checkPrimaryscope' => ['only' => 'createorupdateaddress'],要是用驼峰就不行了,这是老师给我们埋的惊喜?哈哈哈

0
0

7七月

2018-01-26

什么叫改成一个单词?

0
3
须尽欢csw
回复
7七月
是,用了路由访问,就没这个问题。前置操作,怎样命名都能正常访问
2018-01-29
共3条回复

微信小程序电商实战 从前端到后端的全流程精讲

全栈工程师/前后端都讲/架构思想/ RESTFul API、MySQL表设计

4805 学习 · 4382 问题

查看课程