gpt4 book ai didi

php - 保存到数据库之前的 Laravel 预览

转载 作者:行者123 更新时间:2023-11-29 11:10:17 25 4
gpt4 key购买 nike

我需要您关于解决下一个问题的最佳实践的建议:

我的管理面板中有一个(非常复杂的)表单,它将图像、常规字段保存到主模型中,并且还为主模型保存了很多关系。

现在我想添加一个“保存前预览”功能,以便管理员可以在将更改保存到数据库之前预览更改,问题是我实际上无法保存模型或其与数据库的关系,因为那么用户将在发布之前看到更新的数据。我也无法取消发布该帖子或其中的任何关系,因为用户无权访问该帖子。

更新:

重要的是要知道解决方案必须是通用的,因为我不能总是知道预览页面使用的模型和对象是什么。

提前致谢!

最佳答案

如果您希望能够浏览已生效的更改的网站,那么您必须以某种方式将帖子及其相关模型识别为处于某种“草稿”模式,该模式仅可见特定用户。

您可以为 eloquent 设置查询范围,例如可以按特定列/值自动过滤任何模型的查询:

https://laravel.com/docs/5.3/eloquent#query-scopes

我将创建一个执行身份验证检查的查询范围,并在用户未登录时添加一个 where 子句来过滤结果(您也可以选择在此处检查特定角色):

class PublicScope implements ScopeInterface {

public function apply( Builder $builder )
{
if( !Auth::check() ) {
$builder->where(function( $query ) {
$query->where('is_draft', '!=', 1);
});
}
}

public function remove( Builder $builder )
{
$query = $builder->getQuery();

foreach((array)$query->wheres as $key => $where) {
if($where['column'] == 'is_draft') {
unset($query->wheres[$key]);
$query->wheres = array_values($query->wheres);
}
}
}
}

如果您不希望在预览时隐藏更新的模型,您可以在草稿模式下生成每个模型的副本,以便旧模型保持不变。如果用户决定放弃更改,您可以删除重复的模型,如果他们想继续并保存它们,则可能会覆盖旧模型。

关于php - 保存到数据库之前的 Laravel 预览,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40701642/

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