cakePhp 3.4授权

cakePhp 3.4 Authorization

我正在尝试保存观看次数以供统计。它仅在经过身份验证的用户访问此页面时保存记录。未经身份验证的用户访问此功能时保存失败。

 use Cake\ORM\TableRegistry;
    use Cake\Event\Event;

      public function beforeFilter(Event $event)
            {
                    $this->Auth->allow(['view']);
            }
       public function view($photoId = null)
        {
            $photoViewsTable = TableRegistry::get('PhotoViews');
            $photoViews = $photoViewsTable->newEntity();
            $photoViews->ip_address = $_SERVER['REMOTE_ADDR'];
            $photoViews->photo_id = $photoId;
            $photoViews->user_id = ($this->request->session()->read('Auth.User.id')) ? $this->request->session()->read('Auth.User.id') : 0;
            $photoViews->ip_address = $_SERVER['REMOTE_ADDR'];
            $photoViewsTable->save($photoViews);
    }

我认为这是因为您模型中的验证规则 PhotoViews。 检查您是否验证 user_id 存在于 table 用户中。

将这一行的 0 改成 null

$photoViews->user_id = ($this->request->session()->read('Auth.User.id')) ? $this->request->session()->read('Auth.User.id') : null;

一定要检查模型中 allowEmpty 和数据库中 null 的验证 table。

你可以通过像这样获取验证错误来调试它。

if(!$photoViewsTable->save($photoViews)){
    debug($photoViewsTable->getErrors());
}

登录和不登录都要检查这个。

希望这会有所帮助。