我在所有模型中使用Auth在检索时将日期时间转换为用户的时区。现在我遇到了用户未经过身份验证的情况,这种转换需要在我的模型中完成。
我的目标是从另一个表中检索默认时区,如下所示:
$business = Business::where('id', '=', $id)->first(); // default timezone is in here: $business->timezone
由于我在我的所有模型中都使用\ Auth :: user() - > timezone,我是否应该在上面添加代码(我需要传递$ id,这在用户时是不可用的是否经过身份验证)以检索默认时区,因此我可以全局访问$ business-> timezone,仅在用户未经过身份验证时?
这是我目前在其中一个模型中的代码。
/**
* Set event_start attribute.
*/
public function setEventStartAttribute($event_start)
{
$this->attributes['event_start'] = Carbon::createFromFormat('Y-m-d H:i', $event_start, \Auth::user()->timezone)->setTimezone('UTC');
}
/**
* Set event_end attribute.
*/
public function setEventEndAttribute($event_end)
{
$this->attributes['event_end'] = Carbon::createFromFormat('Y-m-d H:i', $event_end, \Auth::user()->timezone)->setTimezone('UTC');
}
/**
* Get event_end attribute.
*/
public function getEventEndAttribute($value)
{
$format = $this->getDateFormat();
return Carbon::createFromFormat($format, $value, 'UTC')->setTimezone( \Auth::user()->timezone);
}
/**
* Get event_end attribute.
*/
public function getEventEndAttribute($value)
{
$format = $this->getDateFormat();
return Carbon::createFromFormat($format, $value, 'UTC')->setTimezone( \Auth::user()->timezone);
}
我想我的代码会改为:
/**
* Set event_start attribute.
*/
public function setEventStartAttribute($event_start)
{
if (Auth::check()) {
$this->attributes['event_start'] = Carbon::createFromFormat('Y-m-d H:i', $event_start, \Auth::user()->timezone)->setTimezone('UTC');
}
else {
$this->attributes['event_start'] = Carbon::createFromFormat('Y-m-d H:i', $event_start, $business->timezone)->setTimezone('UTC');
}
}
由于
答案 0 :(得分:0)
在这种情况下,Cache是默认时区的选项。然后创建一个静态提供此信息的类。
创建一个类:
public class MyTimezone {
public static function getTimezone(){
if(\Auth::check()) {
$timezone = \Auth::user()->timezone;
} else {
$timezone = Cache::get('default_timezone');
if(empty($timezone)) {
//query business here
$timezone = $business->timezone;
Cache::put('default_timezone', $business->timezone); //cache here and "never" query again
}
}
return $timezone;
}
}
并像这样使用:
$this->attributes['event_start'] = Carbon::createFromFormat('Y-m-d H:i', $event_start, MyTimezone::getTimezone())->setTimezone('UTC');
答案 1 :(得分:0)
创建一个自定义帮助程序并使其可以从应用程序的任何位置访问,看看这篇文章: