【问题标题】:Laravel: Session vars or set a var multiple times?Laravel:会话变量或多次设置变量?
【发布时间】:2019-11-26 22:36:57
【问题描述】:

当在整个控制器中使用相同的变量时,最好设置会话变量,还是重复调用相同的辅助函数?例如,假设我有一个具有 hexColor 属性的 Ball 对象:

$ball->hexColor;

数据库中的 Ball 表结构如下:

id  | name | hexColor

现在,假设这个十六进制颜色有一个较浅的版本和一个较深的版本,我不想存储在表格中,以节省内存并避免冗余数据:

不是这个:

id  | name | hexColor | lightHexColor | darkHexColor

我在模型中有一个使颜色变亮或变暗的函数:

//second parameter: 1 = darken, 2 = lighten
public static function changeColorBrightness(String $hexColor, int $darkenOrLighten)
{
    /* Some code */

    return $alteredColor;
}

在我的控制器中,我是否只调用此辅助函数两次,一次用于变暗,一次用于变亮,并将它们存储在会话中:

public function someFunction($ballId)
{
    $ball = Ball::find($ballId);

    $darkColor = Ball::changeColorBrightness($ball->hexColor, 1);
    $lightColor = Ball::changeColorBrightness($ball->hexColor, 2);

    session()->set('darkColor', $darkColor);
    session()->set('lightColor', $lightColor);
}

或者我是否在需要更改颜色的每个方法中调用辅助函数的效率较低:

public function methodCalledFromRoute_1($ballId)
{
    $ball = Ball::get($ballId);

    $darkColor = Ball::changeColorBrightness($ball->hexColor, 1);
    $lightColor = Ball::changeColorBrightness($ball->hexColor, 2);

    /* More code */
}

public function methodCalledFromRoute_2($ballId)
{
    $ball = Ball::get($ballId);

    $darkColor = Ball::changeColorBrightness($ball->hexColor, 1);
    $lightColor = Ball::changeColorBrightness($ball->hexColor, 2);

    /* More code */
}

etc.

我觉得第一种方法,设置会话变量一次,不被认为是最佳编码实践,但我不确定为什么不这样做。你们怎么看,更好的方法是什么?为什么?

【问题讨论】:

  • 为什么不在Ball 类上使用访问器?

标签: php laravel session eloquent


【解决方案1】:

这取决于会话数据的存储位置。通常它位于文件或数据库中,因此检索值相对较慢。

因为执行changeColorBrightness() 函数很可能比从会话中检索值快得多。

【讨论】:

    猜你喜欢
    • 2015-04-09
    • 1970-01-01
    • 2016-11-12
    • 2018-05-02
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    相关资源
    最近更新 更多