在我的Laravel应用程序中,如何将辅助函数放置在哪里以及如何调用它?

5 浏览
0 Comments

在我的Laravel应用程序中,如何将辅助函数放置在哪里以及如何调用它?

目前我有这段代码:

$image = Image::find($id);
$views = $image->views;
$image->views = $views + 1;
$image->save();

这段代码位于返回特定图片视图的函数中。重点是每当用户请求该视图时,图片的浏览次数应该增加,但是我不喜欢在返回视图的函数中包含这个逻辑,所以我希望创建一个:

public function updateImageViews() {
    更新浏览次数的逻辑;
}

放在我的控制器中的某个地方(我考虑把它放在`ArtworkController`中),然后在返回视图的函数中调用这个函数。

现在我想知道这样做是否正确。问题是,我认为现在这样做可能行不通,因为我认为在没有进行一些操作之前,我不能在另一个控制器中调用一个函数。

0
0 Comments

在我的Laravel应用程序中,我想知道如何将和如何调用一个辅助函数的问题出现的原因以及解决方法。

在Laravel中,当我们需要处理一些复杂的逻辑或操作时,我们可以使用服务(services)。我们可以在服务中放置业务逻辑或复杂操作,并且可以在其他服务或多个控制器中调用该服务,以满足我们的需求。

对于上面的代码,实际上可以简化为一行代码,所以可能没有必要将其提取到其他方法中。简化后的代码如下:

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()这样的函数,我就无法把它放在任何模型中,因为它们之间没有关系。

如果你只需要函数,可以参考stackoverflow.com/questions/43168719/…,我在那里解释了如何实现。

Image::whereId($id)->increment('views')可以完成相同的工作,但不会先运行select语句。

这是真的,但根据应用程序的不同,最好获取实际的模型来触发任何其他操作(例如观察者)。

总结起来,对于复杂的逻辑或操作,我们可以使用服务来处理。如果需要简单的函数,但又无法放在任何模型中,可以考虑使用辅助函数类。

0