These are chat archives for LaravelRUS/chat

30th
Apr 2014
Maxim
@Big-Shark
Apr 30 2014 00:29
@Butochnikov у меня рокетир с 4 или 5 тасками дополнительными, ну и включения режима меинтеин дабы сделать миграции.
@Butochnikov сейчас еще доку развернул на 1 из серверов
@Butochnikov на одном из проектов капа 2 стоит
Alexander Zhuravlev
@SCIF
Apr 30 2014 00:33
@Big-Shark , а для капистраны вы что-то писали или где-то готовое дёрнули?
@SCIF Артур(fliptheweb) гдето дернул или написал изначальный вариант, но там была только заливка, хуки я написал сам, частична найдя их в интере и кастомизируя под себя. Единственное что линки на нужные папки так помойму и не создаются, хотя команды выполняются, но тут уже мои знания линукса меня подводят.
Alexander Zhuravlev
@SCIF
Apr 30 2014 00:47
@Big-Shark , да в бытность админом, тоже писали своё.
Maxim
@Big-Shark
Apr 30 2014 00:48
@SCIF ну а как иначе, если в капи нет таск для работы с композером)
Orel
@2byte
Apr 30 2014 06:42
Странно у меня токен не пишется в remember_token хотя вторым аргументом в Auth true
Maxim
@Big-Shark
Apr 30 2014 06:59
а не должен?
Alexey
@Butochnikov
Apr 30 2014 07:49
@Big-Shark в итоге тебе какой инстрУмент больше нравится рокета, доку или капа?
Orel
@2byte
Apr 30 2014 08:27
Как поменять пароль в базе если хэш постоянно меняется ? Hash :: make('secret')
Orel
@2byte
Apr 30 2014 09:34
var_dump(Auth :: attempt(array('email' => 'xvab@bk.ru', 'password' => '123'), true))
Ну не пишет он токен в remember_token
Alexander Egorov
@Amegatron
Apr 30 2014 10:36

@2byte
1) у тебя точно в модели юзера реализованы методы?

public function getRememberToken()
{
    return $this->remember_token;
}

public function setRememberToken($value)
{
    $this->remember_token = $value;
}

public function getRememberTokenName()
{
    return 'remember_token';
}

2)
у тебя точно последняя версия ларика?

Orel
@2byte
Apr 30 2014 10:39
Добавил только что эти методы, не заполняет, версия 4.1
Alexander Egorov
@Amegatron
Apr 30 2014 10:41
раз у тебя работало без этих методов, значит версия не последняя
4.1 ни о чем не говорит, должна быть 4.1.26
Orel
@2byte
Apr 30 2014 10:42
"laravel/framework": "4.1.*"
Orel
@2byte
Apr 30 2014 10:50
Обновил
Removing laravel/framework (v4.1.24)
  • Installing laravel/framework (v4.1.28)
    Downloading: 100%
Но всеравно не пишет токен
Все записал нужно было завершить текущий сеанс
Maxim
@Big-Shark
Apr 30 2014 12:13
@Butochnikov ну рокетир и доку сравнивать не коректно, разные инструменты, а вот рокетир и капу можно, мне больше рокетир понравился
slider23
@slider23
Apr 30 2014 12:36
Австралийский дизайнер Уилл Дэйбл предлагает интересную метафору, помогающую разрабатывать простые и удобные интерфейсы. Чтобы представить, что творится в голове у пользователя, Уилл Дэйбл предлагает вообразить, что пользователь пьян. Его внимание рассеянно, он легко выходит из себя, он не слишком отчётливо видит и не очень уверенно двигается — если постоянно помнить об этом, интерфейс получится чище и проще.
0.7 красненького - и идти тестить интерфейс.
Brezhnev Ivan
@vanchelo
Apr 30 2014 12:42
))
RomM1
@RomM1
Apr 30 2014 14:02
Всем привет. Кто что в моделях реализует?
slider23
@slider23
Apr 30 2014 14:03
Думаешь делать ли валидацию в моделях ?
RomM1
@RomM1
Apr 30 2014 14:06
Да. Еще можно написать в модели функции добавления/изменения записей, чтобы в контроллере не писать длинные запросы через Builder
slider23
@slider23
Apr 30 2014 14:10
функции добавления/изменения записей логичнее делать в репозиториях
хотя если ты 200% уверен, что в проекте будешь использовать только Eloquent, то можно это писать прямо в моделях.
RomM1
@RomM1
Apr 30 2014 14:14
Пока просто пишу запросы в контроллерах, но все это громозко и некрасиво. Можно поподробней про репозитории?
slider23
@slider23
Apr 30 2014 14:14
Классы-Репозитории, которые, например, задаются в аргументах контроллера (Dependency Injection) позволяют менять базу данных без изменения кода в местах с более высокой абстракцией (контроллеры).
Сейчас погуглю, где есть понятное объяснение про репозитории..
Приложение должно быть иерархично. От кода с высокой абстракцией (логин пользователя) до кода с низкой абстракцией (запрос в базу с логином и хэшем пароля). Все должно быть в своих классах.
RomM1
@RomM1
Apr 30 2014 14:19
Например, мне нужна модель Test в контроллере. В конструкторе пишу
slider23
@slider23
Apr 30 2014 14:20
да в принципе можно все брать с https://www.google.com/search?q=laravel+repository+pattern
RomM1
@RomM1
Apr 30 2014 14:24
А когда нужно сменить базу, то просто переписываешь UserRepository?
slider23
@slider23
Apr 30 2014 14:24
Да.
RomM1
@RomM1
Apr 30 2014 14:24
Спасибо! Давно мучал вопрос о DI.
slider23
@slider23
Apr 30 2014 14:26
Причем в репозитории можно миксовать, часть писать с Eloquent, а часть с Builder, если есть сложная специфичная задача.
Там в примерах еще используются интерфейсы. В принципе, их можно опустить, если лень писать. И заодно это позволит отказаться от App::bind() интерфейса на определенный репозиторий.
Вот еще про DI - http://habrahabr.ru/post/206442/
slider23
@slider23
Apr 30 2014 14:36
Про валидацию - есть два подхода. Можно сделать отдельный класс валидации, передавать его в аргументы контроллера и им валидировать формы pdl.vimeocdn.com/23926/270/197997528.mp4?token2=1398870048_b8d461d3ecff8b9e8469798fcfd9105e&aksessionid=6113941d41047496 , а можно попроще, сделать валидацию в модели, слушая попытки сохранения eloquent-модели pdl.vimeocdn.com/88185/677/198157531.mp4?token2=1398869798_8ab5c98ef9840453c890e6d7b9c7855c&aksessionid=66d6739847308167
Andrew
@bitw
Apr 30 2014 14:45
@slider23 а можно где-то почитать про реализацию функции добавления/изменения записей логичнее делать в репозиториях? а то я обычно как то миксую валидацию в контроллерах и моделях... по ситуации
RomM1
@RomM1
Apr 30 2014 14:46
Спасибо, очень полезная информация! Еще остался вопрос о ORM и Join. Сейчас, когда нужно присоединить множество таблиц, пишу: Model::leftJoin()->leftJoin()... Или есть более красивое и правильное решение?
slider23
@slider23
Apr 30 2014 14:47
@bitw я выше как раз кидал ссылки, laravel repository pattern в гугле и по похожим словам.
Alexander Zhuravlev
@SCIF
Apr 30 2014 14:47
@RomM1 , связи и with().
slider23
@slider23
Apr 30 2014 14:48
@RomM1 orm и join - это вещи взаимоисключающие, имхо. или ты прописываешь отношения, и тогда забываешь про join, или тогда не юзаешь orm, а сам выбираешь данные джойнами
Alexander Zhuravlev
@SCIF
Apr 30 2014 14:48
А я в упор не понимаю зачем над моделью городить ещё одну абстракцию. Ведь модель итак является абстракцией над таблицей/записью.
RomM1
@RomM1
Apr 30 2014 14:49
Лучше все-таки использовать ORM или джойны?
slider23
@slider23
Apr 30 2014 14:49
ORM
RomM1
@RomM1
Apr 30 2014 14:50
По скорости выполнения запросов сильная разница?
slider23
@slider23
Apr 30 2014 14:50
орм вообще и в ларавеле в частности - это удобно
скорость в 99% случаях одинаковая
Alexander Zhuravlev
@SCIF
Apr 30 2014 14:51
Самое главное — на ней не стоит циклиться.
RomM1
@RomM1
Apr 30 2014 14:52
Спасибо, пошел переписывать код :)
slider23
@slider23
Apr 30 2014 14:52
в крайнем случае можно в репозитории узкое место на джоинах переписать. но я слабо представляю, когда это может понадобиться
Andrew
@bitw
Apr 30 2014 14:52
я раньше вообще не понимал зачем нужна ORM. а сейчас наоборот только ей и пользуюсь )
slider23
@slider23
Apr 30 2014 14:53
процессорные мощности растут постоянно. а мощность мозга не растет. поэтому надо перекладывать сложные вещи на плечи машины.
у ней голова железный
Alexander Zhuravlev
@SCIF
Apr 30 2014 14:54
Да не в этом дело. Те, кто гоняются за скоростью вот так вот — на пустом месте — просто не замечают за деревьями леса.
Andrew
@bitw
Apr 30 2014 14:54
ну иногда конечно приходится извратится и на пару дней залипнуть над сборкой набора моделей, зато потом... ляпота!
Orel
@2byte
Apr 30 2014 15:02
Cookie :: forget() только в заголовок пихать?
slider23
@slider23
Apr 30 2014 15:06
@SCIF "зачем над моделью городить ещё одну абстракцию" ну чтобы можно было легко менять абстракции над таблицами. Если в контроллере писать елоквент-синтаксисом, то твоя новая абстракция должна быть совместима с елоквентом по вызовам.
Alexander Zhuravlev
@SCIF
Apr 30 2014 15:07
Ну да, так в любом случае синтаксис будет одинаков.
slider23
@slider23
Apr 30 2014 15:07
Если проект простой и ты уверен, что будешь юзать только orm, то можно репозитории и не юзать.
Orel
@2byte
Apr 30 2014 15:08
:game_die:
slider23
@slider23
Apr 30 2014 15:09
@SCIF почему одинаков ? В одном случае Post::with('comments') , а в другом - запрос в монгу, например.
а если есть репозиторий, в любом случае в контроллере будет- $this->postRepo->some_action();
@2byte вопрос непонятен
Alexander Zhuravlev
@SCIF
Apr 30 2014 15:11
@slider23 , а кто мешает юзать User::some_action()?
Orel
@2byte
Apr 30 2014 15:11
@slider23 просто Cookie :: forget() не уничтожает
slider23
@slider23
Apr 30 2014 15:12
@SCIF можно и так, а вдруг где-то забудешь, и поработаешь напрямую с orm, ->save() сделаешь, например ?
объем кода примерно одинаковый получается
что в репозитории что в методах модели
а по SOLID принципам репозиторий предпочтительнее.
хотя, конечно, все зависит от объёма проекта, нужно ли будет расширяться. Где-то SOLID можно и пренебречь.
Alexey
@Butochnikov
Apr 30 2014 15:20
вы тут про скорость говорили, но я вспомнил как на ларе запрос сделал, так он сек. 20 выполнялся и памяти жрал, а напрямую записал 3-5 секунд
@Big-Shark да доку нельзя с ракетой сравнивать, но все же результат одинаковый. еще научится к нему доп. скрипты писать, вообще супер будет
Alexander Zhuravlev
@SCIF
Apr 30 2014 15:26
@slider23 , ок, замысел понятен. Но это ведь на каждый запрос нужно учесть $limit, $offset, $sort, $order… Красота уступит место мифической гибкости.
Orel
@2byte
Apr 30 2014 15:58
Как уничтожить куку ?
Cookie :: queue('ahash', ''); уничтожает, а Cookie :: forget() нет (
slider23
@slider23
Apr 30 2014 16:12
а Cookie::forget('ahash'); ?
нужно указывать имя куки
Orel
@2byte
Apr 30 2014 16:14
Я вроде при памяти )
slider23
@slider23
Apr 30 2014 17:36
Кэш с тэгами в laravel неюзабельный из коробки :(
Я думал, что если сделать Cache::tags("tag1","tag2","tag3"..."tagN")->put() , то потом можно делать Cache::tags("tag3")->get() , т.е. по любому из тэгов.
slider23
@slider23
Apr 30 2014 17:42
Оказывается, чтобы читать кэш, надо все тэги до одного перечислять Cache::tags("tag1","tag2","tag3"..."tagN")->get()
Brezhnev Ivan
@vanchelo
Apr 30 2014 18:04
а какой смысл в таком методе?
slider23
@slider23
Apr 30 2014 18:05
в каком ?
Brezhnev Ivan
@vanchelo
Apr 30 2014 18:05
все теги перечеслять
slider23
@slider23
Apr 30 2014 18:06
вот я и говорю, что никакого :(
один тэг еще можно как-то юзать, но мультитегирование вообще практически не нужно.
я бы все это переписал. непонятно зачем оно существует в таком виде..
Brezhnev Ivan
@vanchelo
Apr 30 2014 18:09
Note: Cache tags are not supported when using the file or database cache drivers. Furthermore, when using multiple tags with caches that are stored "forever", performance will be best with a driver such as memcached, which automatically purges stale records.\
у тебя какой драйвер?
slider23
@slider23
Apr 30 2014 18:14
redis
я этот кусок доков сегодня переводил и запушил в репу :)
Brezhnev Ivan
@vanchelo
Apr 30 2014 18:15
)
slider23
@slider23
Apr 30 2014 18:16
и вот решил проверить как оно работает
хотя, теоретически, можно и с такими тэгами юзать
все равно запись и чтение как правило в одном месте кода только. где-то в репозитории
это сброс кэша везде по коду будет разбросан, в разных местах.
да, наверное, я преждевременно разволновался. Можно юзать изкоробочный вариант.
Brezhnev Ivan
@vanchelo
Apr 30 2014 18:19
а я что-то не въеду как их использовать
чтобы достать запись из кэша нужно перечислить все теги + ключ
доставать только по одной можно
dd(Cache::tags('people', 'authors')->taggedItemKey('John')); // laravel:23bbaef850925410913d7884236c97cb1de7a1e8:John
ого ключик какой
slider23
@slider23
Apr 30 2014 18:30
ну например есть объекты, у объекта может быть несколько состояний. они показываются у пользователя в админке. выборка объектов сложна, поэтому кэшируется. т.е. есть кэш объектов, есть кэш страниц состояний. при изменении состояния объекта надо иметь возможность сбрасывать кэш страниц объектов.
хотя я когда писал понял, что таки не катит ларавеловское решение
оно для совсем простейших вещей.
Brezhnev Ivan
@vanchelo
Apr 30 2014 18:34
к примеру у меня tags('люди', 'двуногие') tags('собаки', 'двуногие'), как мне сбросить всех двуногих?
тут как я понял мне придется перечислять все теги первостоящие
slider23
@slider23
Apr 30 2014 18:38
не, флюшить можно по любому тэгу
Brezhnev Ivan
@vanchelo
Apr 30 2014 18:39
надо проверить)
slider23
@slider23
Apr 30 2014 18:39
в документации в примере флюшат по второму тэгу, например
Brezhnev Ivan
@vanchelo
Apr 30 2014 18:43
ага, я понял как оно работает)
доставать по всем тегам, убивать по одному