无法进入前置方法
来源: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
相似问题

