gpt4 book ai didi

php - 在 Laravel 应用程序中放置非 Controller 或模型方法的位置

转载 作者:行者123 更新时间:2023-12-01 22:19:39 25 4
gpt4 key购买 nike

我有一个 PHP Laravel 应用程序,它有一个用于 EmailTokenUrlLogin 的 Elequent 模型和一个 Controller ,用于通过访问 URL 中带有 token 值的 URL 来登录用户。

我想要一个函数来创建新的模型/数据库记录来为用户生成 token ,并能够从我的应用程序中的任何其他 Controller 或模型调用此函数。

现在我在我的登录 Controller 中有它,但是我对此并不满意,因为它需要一个 POST 请求来发布所有必需的函数参数,或者一个带有长而复杂的参数 URL 的 GET 请求。

因此,我希望我在 generateShortLifeEmailTokenUrl($user_id, $email, $expireType, $expireNumber = '') 下面的函数位于应用程序中的某个位置,我可以在其中从任何地方调用它。

像下面这样的函数最好放在哪里,以及如何让它可以从其他模型和 Controller 调用?

public function generateShortLifeEmailTokenUrl($user_id, $email, $expireType, $expireNumber = '')
{
if(Auth::user()->isAdmin){

// generate a new token
// ... other logic here......

// create model and DB record and return the created token value
$emailTokenUrlLoginData = new EmailTokenUrlLogin;
$emailTokenUrlLoginData->user_id = $user_id;
$emailTokenUrlLoginData->email = $email;
$emailTokenUrlLoginData->token = $createToken();
$emailTokenUrlLoginData->expireType = $expireType;
$emailTokenUrlLoginData->expireNumber = $expireNumber;
$emailTokenUrlLoginData->save();

// return generated token
return $emailTokenUrlLoginData->token;
}

}

最佳答案

这实际上取决于您希望代码的复杂程度。

如果您真的只需要在一个 Controller 操作中使用它,您可以将代码放在那里。或者您可以在该 Controller 上创建一个私有(private)方法来完成这项工作。高级程序员会认为这是一种不好的做法,但对于小型应用程序来说已经足够了。

Alexey 对全局函数的建议也有效,但被认为是更糟糕的做法,因为它是全局的。如果您将所有函数都设为全局函数,那么您的全局作用域和命名空间将充满不相关的东西,这些东西最终会互相妨碍。同样,对于小型应用程序,您可能会很好。

现在,如果您想知道更好的做法是什么:关键字是服务依赖注入(inject)。这不是我要在这里解释的内容,但是网络上有很多资源可以帮助您了解这些概念的工作原理和好处。

Laravel 内置了对依赖注入(inject)的支持,你可以在 documentation 中阅读所有相关内容。 .

关于php - 在 Laravel 应用程序中放置非 Controller 或模型方法的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41110071/

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