Laravel 4 -为用户设置时区


Laravel 4 - Set timezone for user

在laravel中,app/config/app.php的默认时区设置为UTC。在我的用户设置页面,用户可以选择他们的首选时区,这是存储数据库。

目前我有这个在我的routes.php更改时区从默认的UTC到用户的时区。

$timezone = (Auth::user()->userDetail->timezone) ? Auth::user()->userDetail->timezone : Config::get('app.timezone');
date_default_timezone_set($timezone);

这是最好的地方吗?我只使用routes.php为我的路由分组,get和帖子。

在app/filters.php文件中,

这样做:

    App::before(function($request)
    {
        $timezone = (Auth::user()->userDetail->timezone) ? 
            Auth::user()->userDetail->timezone : 
            Config::get('app.timezone');
        date_default_timezone_set($timezone);
        DB::statement("SET time_zone = '" . $timezone . "'");
    });

作为额外的奖励,我们设置了MySQL连接的时区。

我正在学习laravel,但是当我使用其他框架时,我更喜欢把东西放在服务层。例如,如果你有一个路由指向用户设置时区的页面,那将被连接到一个控制器。假设控制器名为SettingsController,看起来像这样(意译):

class SettingsController {
     public function saveSettings() {
         $settingsService = new SettingsService();
         $settingsService->save( $params ); 
     }    
 }

那么你将在另一个类中设置服务:

class SettingsService {
 public function save( $params ) {
      // Assuming the settings page could save to multiple places (not all in same table)...
      $timezone->set( $params['timezone'] );  // set and save timzeone params
      .... // save other params
 }
}

否则,如果timezone和whatever都在同一个表中,则将它们保存在一起。如果您只想显示时区而不保存它,那么同样的概念适用于如下:

class SettingsController {
public function setSettings() {
     $settingsService = new SettingsService(); // or timeservice or whatever you want to call it
     $settingsService->setSettings( $userInfo ); 
}    
}

那么你将在另一个类中设置服务:

class SettingsService {
 public function setSettings( $userInfo ) {
      // Assuming the settings page could save to multiple places (not all in same table)...
      $user->setTimezone( $userInfo['timezone'] );  // set and save timzeone params
      .... // save other params
 }
}

您可以更疯狂,让它访问成员时区而不是直接访问数组,但对于这个简单的项目来说,这是一种过度的方式。是的,新类是硬编码的依赖项,可以被注入。我的观点是,有很多方法可以使这种方式变得比需要的更复杂。

如果这不是很清楚,我很抱歉。不要在我面前放laravel,但一般的想法是把它分层,尽管这对你正在做的事情来说可能会带来太多的开销。我知道Zend有helper的概念,尽管我对laravel不太熟悉,不知道它是否存在(尽管我认为它存在)。