Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 28.09.2016 13:11:39

Пользовательская конфигурация

Здравствуйте. У меня такой вопрос. Предположим что мне нужна какая-то конфигурация, доступная в любой точке проекта. В ней есть какой-нибудь идентификатор пользователя по которому в базе буду храниться различные данные, а также другие данные. Например так:

class Config{
    private $_uid;
    public function getUid(){
        if(empty($this->_uid)){
            /* Генерируем uid и сохраняем в переменную */
        }
        return $this->_uid;
    }
}

И далее с помощью инъекций добавляем его куда нужно.
Правильно ли так делать?

Не в сети

#2 28.09.2016 13:14:56

Re: Пользовательская конфигурация

Контекст применения какой будет? Примеры вызова приведи.

Не в сети

#3 28.09.2016 13:19:19

Re: Пользовательская конфигурация

Если конфиг юзерозависим — почему бы не сделать его пропертей юзера
Если предполагаются активные операции по конфигам разных пользователей, без создания сущностей их самих?

Не в сети

#4 28.09.2016 13:24:26

Re: Пользовательская конфигурация

Например примерно такой:

class IndexController extends Contoller{
    public function index(Config $config){
        $items = ItemsModel::whereUid($config->getUid())->get();
    }
}

Какое-нибудь подобное использование может потребоваться например в middleware.

Не в сети

#5 28.09.2016 13:35:29

Re: Пользовательская конфигурация

Предполагается только конфиг одного юзера. В нем будет содержаться уникальный идентификатор, для получения записей из бд. Например переменная указывающая на то в каком виде предоставлять информацию(список, мозаика) и т.д.

Не в сети

#6 28.09.2016 14:35:04

Re: Пользовательская конфигурация

  1. Предполагается только конфиг одного юзера.

И текущего скорее всего?

При таком раскладе я бы 100% вынес бы в юзер проперти его с ленивой инициализацией типа

PHP
protected $config;

public function 
getConfigAttribute()
{
  if (!
$this->config) {
     
$this->config = new Config($this->id);// или все что угодно там
  
}
  return 
$this->config
}

Не в сети

#7 28.09.2016 14:44:44

Re: Пользовательская конфигурация

Да, текущего. А в чем преимущество ленивой инициализации перед инъекцией? Просто мне может потребоваться использовать данный конфиг в middleware, моделях. А где будет находиться это юзер проперти?

Не в сети

#8 28.09.2016 14:50:26

Re: Пользовательская конфигурация

Я не совсем понимаю, как ты собираешься инжектить конфиг.

Он же привязан к юзеру — завязан на его id? Тебе этот id все равно получать где-то. Затем проводить инициализацию…
По сути это вообще релейшен может быть hasOne

Не в сети

#9 28.09.2016 15:09:18

Re: Пользовательская конфигурация

По факту он никуда не привязан. Эти значения будут находиться в куке в виде сериализованного массива. Когда пользователь заходит на сайт. Данный массив считывается и записывается в конфиг для более удобного обращения. А далее инжектить, как я писал во втором посте. Либо пользовательские объекты так инжектить не получится?

Не в сети

#10 28.09.2016 15:16:04

Re: Пользовательская конфигурация

А, я подумал почему-то, что сохранять будешь в бд.
Тогда пофик вообще, можно и инжектить и в юзера для удобства добавить проперти (если фишка тоько для зарегенных, если нет, то смысла нет конечно)

Изменено VitalN (28.09.2016 15:17:08)

Не в сети

#11 28.09.2016 15:23:29

Re: Пользовательская конфигурация

Понял, спс за ответы.
А можно еще пару вопросов не по теме, как к знающему разработчику?
1. Будет ли данная функция генерировать действительно уникальный идентификатор?

protected function _generateUid(Request $request)
    {
        return uniqid($request->session()->getId(), true);
    }

Ведь в данный момент времени не может быть двух пользователей с одинаковым идентификатором сессии.
2. Правильно ли выносить запросы в модель? Например так:

class Price extends Model
     public function getBySid(string $sid)
    {
        try{
            return $this->whereSid($sid)->first();
        } catch (\Exception $e){
            return false;
        }
    }
}

Не в сети

#12 28.09.2016 15:35:50

Re: Пользовательская конфигурация

1) Должна ☺ Если второй параметр не задать, то лажает точно при большом кол-ве обращений — проверено на практике.
Идентификатор сессии там уже больше для «перебдеть» ☺

2) Вай нот? Криминала не вижу абсолютно. Можно конечно какой-то репозиторий прилепить, но если ради одного метода — то перебор.
Я стараюсь придерживаться принципа KISS и не городить абстракции ради абстракций…

А зачем конфигу, который будет лежать в куке уникальный id?

Не в сети

#13 28.09.2016 15:50:28

Re: Пользовательская конфигурация

Понятно, хорошо, спасибо большое за помощь.
Идентификатор сессии там уже больше для «перебдеть» - Да, чтобы 200% уникальный результат получить)

Не в сети

Подвал раздела