在我的 Laravel 应用程序中放置以及如何调用辅助函数?
Posted
技术标签:
【中文标题】在我的 Laravel 应用程序中放置以及如何调用辅助函数?【英文标题】:Where to put and how to call a helper function in my Laravel app? 【发布时间】:2019-03-22 11:26:18 【问题描述】:目前我有这个代码:
$image = Image::find($id);
$views = $image->views;
$image->views = $views + 1;
$image->save();
代码位于返回特定图像视图的函数中。关键是,每当用户请求此视图时,图像视图计数应该会增加,但是,我不喜欢在返回视图的函数中使用此逻辑,因此我希望创建一个:
public function updateImageViews()
logic that updates views;
在我的控制器中的某个地方(我一直在考虑将它放在我的 ArtworkController
中),然后在我的函数中调用返回视图的函数。
现在我想知道这是否是一个好方法。问题是我不认为这会起作用,因为我认为我不允许在不先做某事的情况下从另一个控制器调用函数。
【问题讨论】:
它到底有什么不同,是包含代码的函数还是只是代码本身在做必要的事情? 【参考方案1】:对于更复杂的事情,您使用服务。您将业务逻辑或复杂操作放入其中。然后,您可以在其他服务或多个控制器中调用此服务 - 无论您需要什么。
关于上面的代码,确实可以重构为单行代码,所以可能不需要将其提取到其他方法中。对此的简化代码如下所示:
Image::find($id)->increment('views');
但是,如果您真的想在某处提取代码,我会使用静态方法对这种简单的代码进行建模(在本例中为 Image
):
public static function updateViews($id)
$image = static::find($id);
$views = $image->views;
$image->views = $views + 1;
$image->save();
return $image;
【讨论】:
哦,哇,不知道我可以用这么少的代码来增加它。无论如何,如果我需要一个不完全适合放在任何模型中的简单函数,我应该把它放在哪里?显然,我可以将 updateViews() 函数放入 Image 模型中,因为它有意义,但如果该函数类似于 changeFtoC() ,我将无法将它放入任何模型中,因为不会有任何关系。 @Bobimaru 如果您只需要功能,请查看***.com/questions/43168719/… - 我已经在其中解释了如何完成Image::whereId($id)->increment('views')
应该做同样的事情,但不需要先运行 select 语句
@TravisBritz 确实如此,但根据应用程序,最好获取实际模型来触发任何其他操作(例如观察者)以上是关于在我的 Laravel 应用程序中放置以及如何调用辅助函数?的主要内容,如果未能解决你的问题,请参考以下文章
如何在我的 ag-grid 单元格中放置一个 react jsx 组件