gpt4 book ai didi

cakephp - 有没有办法添加 created_by 和 modified_by 类似于 cakePHP 中创建和修改的工作方式?

转载 作者:行者123 更新时间:2023-12-04 18:48:15 25 4
gpt4 key购买 nike

我想知道是否有办法添加 created_bymodified_by类似于 createdmodified在 CakePHP 中工作?

我喜欢 cake 识别这些字段并自动处理它们的事实,无论模型如何,我根本不需要实现它们。我想使用当前用户 ID 添加一个类似的功能(在我的应用程序中,总是有一个用户 ID,即使它有时可能是 0)。

我假设起始位置是 before_save()在 app_model 中?

——

另外,有什么方法可以让蛋糕自动将其识别为用户表的外键(类似于它识别 user_id 的方式),还是我必须手动添加 has/belongs 关系?我问是因为这将适用于我的大多数模型,所以我更愿意减少冗余代码。

谢谢!

最佳答案

对于您问题的第一部分,我使用此行为代码来完成您正在寻找的内容:

class UserLinkBehavior extends ModelBehavior
{
/**
* The string to use to retrieve the user id from CakeSession
*
* @var string
*/
var $user_id_key = 'Auth.User.id';

function setup(&$model, $settings)
{
if(isset($settings['user_id_key']))
{
$this->user_id_key = $settings['user_id_key'];
}
}

function beforeSave(&$model)
{
App::uses('CakeSession', 'Model/Datasource');

$logged_user_id = CakeSession::read($this->user_id_key);

if(isset($logged_user_id))
{
$this->set_user_on_current_model($model, $logged_user_id);
}

return true;
}

/**
* Set the created_by and modified_by user id on the current model
*
* @param Model $model
* @param int $logged_user_id
* @return void
*/
private function set_user_on_current_model(&$model, $logged_user_id)
{
if(isset($logged_user_id))
{
/*
* Id is not set -> it is a creation
*/
if($model->hasField('created_by') && (!isset($model->data[$model->alias]['id']) || empty($model->data[$model->alias]['id'])))
{
if(!isset($model->data[$model->alias]['created_by']))
{
$model->data[$model->alias]['created_by'] = $logged_user_id;

/*
* If the save is called with a whitelist, add 'created_by' to the whitelist
* in order to have this field saved as well
*/
if(!empty($model->whitelist) && !in_array('created_by', $model->whitelist))
{
$model->whitelist[] = 'created_by';
}
}
}

/*
* Id is set -> it is an update
*/
if($model->hasField('modified_by') && isset($model->data[$model->alias]['id']) && !empty($model->data[$model->alias]['id']))
{
$model->data[$model->alias]['modified_by'] = $logged_user_id;

/*
* If the save is called with a whitelist, add 'modified_by' to the whitelist
* in order to have this field saved as well
*/
if(!empty($model->whitelist) && !in_array('modified_by', $model->whitelist))
{
$model->whitelist[] = 'modified_by';
}
}
}
}
}

然后只需在您的模型或 AppModel 中声明它
var $actsAs = array('UserLink');

对于问题的第二部分,您可能会在行为中添加一个 beforeFind() 回调并使用 model->bindModel()链接具有 created_by 的模型的函数和 modified_by具有用户模型的字段。我个人更喜欢在需要时在每个模型中手动声明这些链接。

关于cakephp - 有没有办法添加 created_by 和 modified_by 类似于 cakePHP 中创建和修改的工作方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10425598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com