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());
}
登录和不登录都要检查这个。
希望这会有所帮助。
我正在尝试保存观看次数以供统计。它仅在经过身份验证的用户访问此页面时保存记录。未经身份验证的用户访问此功能时保存失败。
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());
}
登录和不登录都要检查这个。
希望这会有所帮助。