Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Laravel 5.3代码中,根据已发布/未发布状态控制内容访问的位置?_Laravel - Fatal编程技术网

在Laravel 5.3代码中,根据已发布/未发布状态控制内容访问的位置?

在Laravel 5.3代码中,根据已发布/未发布状态控制内容访问的位置?,laravel,Laravel,我有一个吉他课程网站使用拉威尔5.3。它有课程,然后被分解成练习 今天我决定在后端添加标记课程或练习的功能。我只是在相应的表中添加了一个“published”列,其中包含0或1 在我的网站中,有许多地方可以以某种形式访问练习或课程,包括课程视图、练习视图、课程部分视图(表格列表)、练习部分视图(也是表格列表)、搜索/查询视图。还有一些路线可以执行一些功能,例如增加课程或练习的命中率,将课程或练习添加到收藏夹中 如上所述,我不确定如何使用最少的代码编辑阻止访问未发布的课程或练习。我开始查看控制器文

我有一个吉他课程网站使用拉威尔5.3。它有课程,然后被分解成练习

今天我决定在后端添加标记课程或练习的功能。我只是在相应的表中添加了一个“published”列,其中包含0或1

在我的网站中,有许多地方可以以某种形式访问练习或课程,包括课程视图、练习视图、课程部分视图(表格列表)、练习部分视图(也是表格列表)、搜索/查询视图。还有一些路线可以执行一些功能,例如增加课程或练习的命中率,将课程或练习添加到收藏夹中

如上所述,我不确定如何使用最少的代码编辑阻止访问未发布的课程或练习。我开始查看控制器文件,但后来意识到控制器可能不是一个包罗万象的东西,比如在查询结果页面上。另外,控制器文件包含多个方法,我不想单独编辑它们。我怀疑有一种“laravel方法”可以在全局范围内完成我需要的工作,而不必修改多个文件中的一组查询可能是中间件之类的?

无论如何,我对laravel还是个新手,如果有一种行之有效的方法来控制标记为未发布内容的路由,我将非常有兴趣了解它


谢谢

看一看,这是最简单的方法

顺便说一句,我更喜欢使用时间戳来表示模型上的已发布状态。这意味着,如果我要去度假,我可以为该内容设置一个未来可用的时间戳

就您的实际问题而言,查询范围是最好的选择:

类课程扩展了模型
{
公共函数范围已发布($query)
{
返回$query->wherePublished(true);
}
}
或者,如果确实使用了时间戳,则可以执行以下操作:

类课程扩展了模型
{
公共函数范围已发布($query)
{

return$query->where('published','interest.。在LessonController by published()中,我认为您的意思是scopePublished()?在我当前的课程控制器中,我有一行:$query=\App\Lesson::query();使用您的方法,我是否可以将其更改为您上面的方式?关于课程控制器具有其他方法的事实如何?我正在尝试找出一种方法,以对发布状态应用一个检查,并使其在所有相关方法中工作。即使该方法定义为
scopePublished())
在模型中,您只需调用
published()
在您的客户端代码中,Laravel会自动计算出您指的范围方法。我知道,这是违反直觉的!我知道您的回答本质上与@Quezler提到的范围概念有关。我现在似乎在使用全局范围并测试用户是否为管理员。每天都了解Laravel的一些新知识!但是我需要继续弹吉他!如果你这样做的话,我不会在全局范围内检查用户,因为这会使你的模型在命令行中不可用(在命令行中没有用户身份验证的概念)。你可能最好做一些类似
lessue::withoutGlobalScope(PublishedScope::class)->get()的事情
在您的管理面板中获取未发布的课程。好的,我必须阅读scope类以更好地理解如何以这种方式实现。Regard这真的很好!尝试了一下,效果很好。但是现在我在后端CRUD中没有看到未发布的项…所以我在引导方法中添加了这个:if(!$user->hasRole('admin'))一切似乎都很好。需要更多的测试,但谢谢你给我看这个!