These are chat archives for LaravelRUS/chat

4th
Dec 2016
Roman Fandeev
@mrFANRA
Dec 04 2016 09:29

Поготие, второй день голову ломаю...
Я хочу убрать ?page=1 в ссылоках у пагинатора для первой страницы. Те что бы получилось:

domain.com/someUrl
domain.com/someUrl?page=2
domain.com/someUrl?page=3

Сейчас пагинатор работает так:

    $model    =    Model::paginate(20);
    // view
    $objects->render();

Оптимальное решение это переписать метод url для AbstractPaginator(так ли это?).
Следовательно мне нужно создать MyAbstractPaginator как расширение AbstractPaginator.

Как этот MyAbstractPaginator подменить, что бы использовался он пагинатором вместо AbstractPaginator?

Maksim (Ellrion) Platonov
@Ellrion
Dec 04 2016 09:36
У тебя Лара какой версии?
Roman Fandeev
@mrFANRA
Dec 04 2016 09:37
5.2
Maksim (Ellrion) Platonov
@Ellrion
Dec 04 2016 09:39
Фигово тогда) в 5.3 упростили изменение шаблона. В 5.2 надо немного по шаманить. Через пару минут отпишу. Был юзкейс про пагинация
Roman Fandeev
@mrFANRA
Dec 04 2016 09:39
ну шаблон поменять не проблема. Но там придется парсить ссылку и выпиливать page для 1ой
но выглядит как костыль просто
Maksim (Ellrion) Platonov
@Ellrion
Dec 04 2016 10:10
да был не прав, шаблоном не отделаешься без костылей. Можно конечно наследоваться от Пагинаторов и перекрыть в них url метод, но тогда придется везде где они используются (например в модели) перекрывать метод что бы дефолтный пагинатор брался твой а не базовый
Roman Fandeev
@mrFANRA
Dec 04 2016 10:11
@Ellrion ну я потому и смотрю в сторону перекрытия метода url в AbstractPaginator
есть еще вариант перекрыть paginate() в Билдере и там инициалировать что то типа MyPaginator
но с абстрактным классом мне кажется ювелирнее
Maksim (Ellrion) Platonov
@Ellrion
Dec 04 2016 10:13
@mrFANRA ну я об этом и говорю. Сам абстрактный ты не как не перекроешьь и не подменишь. От него же наследуются пагинаторы. А тебе нужно наследоваться от них и уже потом в моделе их ставить как дефолтные
Roman Fandeev
@mrFANRA
Dec 04 2016 10:15
те тогда лучше будет перекрыть Builder?
в методе paginate() инициазировать что то типа MyLengthAwarePaginator
Sergey
@UnQuaiz
Dec 04 2016 10:16
@mrFANRA што? опять ?)))
Roman Fandeev
@mrFANRA
Dec 04 2016 10:17
@UnQuaiz ога ))
Sergey
@UnQuaiz
Dec 04 2016 10:17
ща попробую, но сразу говорю - у меня 5.3
Roman Fandeev
@mrFANRA
Dec 04 2016 10:43
да мне бы и саму разобраться, но нет понимания как перекрывать эти методы ... не знаю что гуглить
Sergey
@UnQuaiz
Dec 04 2016 10:45
почему то из 5.3 выпилили presenter из pagination
@mrFANRA я щас поужинаю и гляну. стало интересно
Roman Fandeev
@mrFANRA
Dec 04 2016 10:46
ну как я понял, презентер это вывод непосредственно шаблона
а тут нужно на уровень выше, что бы в шаблон уже шли коррекнтые ссылки
те нужно перекрыть LengthAwarePaginator::url() и Paginator::url()
Xannn94
@Xannn94
Dec 04 2016 10:58
всем привет
KarmaBot
@KarmaBot
Dec 04 2016 10:58
Будь как дома, @Xannn94, я ни в чем не откажу. Много мануалов, коль желаешь, покажу :)
Xannn94
@Xannn94
Dec 04 2016 10:59

ребят подскажите как юзать

 AdminColumnEditable::checkbox('active','Да','Нет')->setLabel('Активировать')

?????

ругается на csrf токен
Xannn94
@Xannn94
Dec 04 2016 11:02
@jhaoda спс)
KarmaBot
@KarmaBot
Dec 04 2016 11:02
Спасибо (+1) для @jhaoda принято! Текущая карма +1349.
Roman Fandeev
@mrFANRA
Dec 04 2016 11:10
@jhaoda подскажи пожалуйста, в правильном направлении идея перекрыть метод url() для LengthAwarePaginator, что бы там убрать параметр page для первой страницы?
Max Mova
@movetz
Dec 04 2016 12:37
@mrFANRA я конечно не он, но тоже вставлю свои 5 копеек. Да, в правильном, наследуешь свой Paginator, не обязательно от LengthAware, и переопределяешь previousPageUrl, смотри по коду пагинатора, что там лучше расширить.
Roman Fandeev
@mrFANRA
Dec 04 2016 12:40
@movetz а в таком случае Model::where()->paginate() будет уже работать с переопределенным пагинатором? не нужно будет шаманить потом с моделями постоянно?
может лучше переопределить билдер и переписать paginate(), там инициализировать свой MyLengthAware...?
Sergey
@UnQuaiz
Dec 04 2016 12:42
@mrFANRA к сожалению - придется
Roman Fandeev
@mrFANRA
Dec 04 2016 12:42
Значит билдер переопределять нужно?
Sergey
@UnQuaiz
Dec 04 2016 12:42
@mrFANRA Builder, Eloquent и т.д.
Roman Fandeev
@mrFANRA
Dec 04 2016 12:43
ну Eloquent расширение билдера вроде
Sergey
@UnQuaiz
Dec 04 2016 12:43
тебе надо будет перекрывать paginate\
писать свой CustomPaginator
Roman Fandeev
@mrFANRA
Dec 04 2016 12:44
как во вреймфрке переопределить его? что бы в моделях ничего не менять..
Sergey
@UnQuaiz
Dec 04 2016 12:59
@mrFANRA ишь ты какой хитрый))
Max Mova
@movetz
Dec 04 2016 13:00

@mrFANRA Почему постоянно, ты можешь переопределить метод в Model

public function newEloquentBuilder($query)
{
        return new Builder($query);
}

создать свою реализацию builder Illuminate\Database\Eloquent\Builder и потом использовать или в своей одной модели и создать новый базовый класс Model с переопред методом

И все
Roman Fandeev
@mrFANRA
Dec 04 2016 13:02
@movetz хм...
Sergey
@UnQuaiz
Dec 04 2016 13:03
@mrFANRA и в Builder перекрой метод paginate()
Max Mova
@movetz
Dec 04 2016 13:03
Как переопределить чтобы ничего не менять? - увы в query не используется di контейнер, так что только ручками. В этом нет ничего плохого, гораздо лучше если ты расширишь классы фреймворка, создашь свой инфраструктурный уровень, чем будешь костылить на доменном уровне, подмешивать к своей, и так может быть сложной бизнес логике, логику пагинатора.
Roman Fandeev
@mrFANRA
Dec 04 2016 13:04
@movetz Согласен, так менее опасно даже.
Sergey
@UnQuaiz
Dec 04 2016 13:04
@mrFANRA а в paginate()
        return new CustomPaginator($results, $total, $perPage, $page, [
            'path' => CustomPaginator::resolveCurrentPath(),
            'pageName' => $pageName,
        ]);
а в нём url()
Roman Fandeev
@mrFANRA
Dec 04 2016 13:04
@movetz спасибо большое, понял!
KarmaBot
@KarmaBot
Dec 04 2016 13:04
Спасибо (+1) для @movetz принято! Текущая карма +11.
Roman Fandeev
@mrFANRA
Dec 04 2016 13:05
@UnQuaiz И тебе спасибо! =)
KarmaBot
@KarmaBot
Dec 04 2016 13:05
Спасибо (+1) для @UnQuaiz принято! Текущая карма +12.
Max Mova
@movetz
Dec 04 2016 13:05
@UnQuaiz попахивает пулл-реквестом в eloquent
Sergey
@UnQuaiz
Dec 04 2016 13:05
@movetz ну если не в eloquent - то в Pagination точно
игла в яйце, яйцо в утке, утка в зайце, заяц в шоке
Max Mova
@movetz
Dec 04 2016 13:08
как-то все больше и больше хочется попробовать сделать свой форк eloquent, добавить нормальные репозитории, доменные модели, с внятным интерфейсом, возможность нормально кастомайзить пагинацию
Roman Fandeev
@mrFANRA
Dec 04 2016 13:26
получилось... столько голову ломал, а так просто )
Дмитрий Мязин
@d4c0
Dec 04 2016 15:53
Нужно передавать определённые данные во все вьюхи на сайте, что правильнее использовать View::share() или View::composer()? Данные будут доставаться из базы.
DeadMoras
@DeadMoras
Dec 04 2016 15:53
Юзал кто-то расширения для работы с csv? Нашел парочку, может кто-то посоветует (нужен обычный импорт)
Maksim (Ellrion) Platonov
@Ellrion
Dec 04 2016 15:54
@d4c0 если у всех вьюх есть общая которую они экстендят (лэйаут) то лучше композер, если нет то шарить
Дмитрий Мязин
@d4c0
Dec 04 2016 15:55
@Ellrion Спасибо, как раз есть общий лэйаут, и в нём эти данные будут отображаться)
KarmaBot
@KarmaBot
Dec 04 2016 15:55
Спасибо (+1) для @Ellrion принято! Текущая карма +156.
cleargoal
@cleargoal
Dec 04 2016 16:04
@KarmaBot Много мануалов - покажи
KarmaBot
@KarmaBot
Dec 04 2016 17:16
@antimech, привет, как настроение?
antimech
@antimech
Dec 04 2016 17:17
Привет.
Командная система https://telegram-bot-sdk.readme.io/docs/commands-system этого пакета отказывается работать, не знаю, может Ларавел слишком новый для пакета.
Как отфильтровать строку вроде /start 123 то есть получить эти цифры в переменную? Придется костылить.
KarmaBot
@KarmaBot
Dec 04 2016 17:17
@antimech, привет =)
Lunarhouse
@Lunarhouse
Dec 04 2016 17:50
Привет! Подскажите плиз. Что-то я не пойму в мутаторах схему. Вот код из документации. А мне нужно, чтобы одно поле брало данные из другого перед отправкой в бд, а не само видоизменялось. Куда пихать второй поле? Заранее спасибо
 public function setFirstNameAttribute($value)
  {
      $this->attributes['first_name'] = strtolower($value);
  }
KarmaBot
@KarmaBot
Dec 04 2016 17:50
@Lunarhouse, привет =)
Lunarhouse
@Lunarhouse
Dec 04 2016 17:53
Вот мне нужно, чтобы в колонку excerpt добавлялись первые 40 символов из поля content (типа предпросмотр статьи)
public function setExcerptAttribute($value)
    {
        $this->attrubutes['excerpt'] =           // какой-то код
    }
dskozin
@dskozin
Dec 04 2016 18:12
@Lunarhouse Может сделать наоборот? getExcerptAttribute - который будет брать первые 40 символов из заданной колонки?
cleargoal
@cleargoal
Dec 04 2016 18:15
@MKiselev это мне?
Lunarhouse
@Lunarhouse
Dec 04 2016 18:15
так лучше? и колонку удалить?
dskozin
@dskozin
Dec 04 2016 18:15
@Lunarhouse А вообще можно оставить set если все же хочешь что бы писалось в базу, просто в контроллере где создается модель аттрибуту exerpt присваивать content. Т.е. content передается в setExcerptAttribute и обрезается до 40 символов.
Lunarhouse
@Lunarhouse
Dec 04 2016 18:16
я просто не знаю как. Что-то в документации скудно описано это
dskozin
@dskozin
Dec 04 2016 18:16
@Lunarhouse Получается что в контроллере и content = content и exerpt = content.
Lunarhouse
@Lunarhouse
Dec 04 2016 18:17
$post->excerpt = substr($input['content'], 0, 40). "...";
так?
dskozin
@dskozin
Dec 04 2016 18:17
@Lunarhouse А ты по логике делай. Сеттер изменяет значение переданное в аттрибут перед сохранением в БД. от этого отталкивайся.
Lunarhouse
@Lunarhouse
Dec 04 2016 18:17
без сеттера?
dskozin
@dskozin
Dec 04 2016 18:17
@Lunarhouse Конеш.
Lunarhouse
@Lunarhouse
Dec 04 2016 18:18
то есть я правильно сделал изначально. А зачем тогда мутаторы, если все так прямо в контроллере можно?
dskozin
@dskozin
Dec 04 2016 18:19
@Lunarhouse Затем, что ты можешь присваивать эти значения не в одном контроллере а в 40.
@Lunarhouse Что бы тебе 40 раз не писать этот код и не помнить вечно, что его нужно написать ты пишеь один раз в модели .
Юрий
@sawerus
Dec 04 2016 18:20
Потомучто контроллеров может быть мильйооонн...
Lunarhouse
@Lunarhouse
Dec 04 2016 18:22
Спасибо, сделаю пока так
KarmaBot
@KarmaBot
Dec 04 2016 18:22
@Lunarhouse, в этом чате принято добавлять имя пользователя, чтобы его поблагодарить.
dskozin
@dskozin
Dec 04 2016 18:23
@Lunarhouse Тем более в контроллере может в массиве присваиваться 100 полей сразу. И тебе придется присвоить все кроме тех которые "мутируют", а потом присваивать измененные.
Lunarhouse
@Lunarhouse
Dec 04 2016 18:25
просто я думал, что мутатором правильнее
dskozin
@dskozin
Dec 04 2016 18:26
@Lunarhouse Правильность определяется конкретной ситуацией. Если ты уверен, что у тебя это в одном месте, то не грех. А если во многих местах, то лучше мутатором.
Lunarhouse
@Lunarhouse
Dec 04 2016 18:30
буду думать)
Zolotov88
@Zolotov88
Dec 04 2016 18:49
А кто-нибудь тут делал EAV на ларе?
dskozin
@dskozin
Dec 04 2016 18:51
@Zolotov88 Я не в контексте. Что такое EAV?
Artur Gafurov
@assurrussa
Dec 04 2016 18:53
@Zolotov88 ты лучше вопрос задавай, что беспокоит)
Zolotov88
@Zolotov88
Dec 04 2016 18:53
Сущность-Атрибут-Значение. К примеру: Товар-Характеристика-Значение. Чаще всего EAV это динамичные атрибуты.
Zlatoslav Desyatnikov
@zlodes
Dec 04 2016 18:54
@Zolotov88, а, таким образом в Битриксе инфоблоки устроены. Планируем как раз такой подход внедрять.
Artur Gafurov
@assurrussa
Dec 04 2016 18:54
@zlodes таким образом где угодно может бытЬ)
Zlatoslav Desyatnikov
@zlodes
Dec 04 2016 18:55
@assurrussa, ну да. Когда занимался разработкой CRM, у нас так было, в том случае достаточно удобная архитектура получалась.
Artur Gafurov
@assurrussa
Dec 04 2016 18:56
@zlodes +, мне под магазин пришлось писать, там этот подход очень оказался актуальным для различных видов товаров и для их фильтров)
правда усложняет понимание кода, в некоторых местах, а так работает очень хорошо)
Zlatoslav Desyatnikov
@zlodes
Dec 04 2016 18:57
@assurrussa, да. Если нужны динамические поля/свойства, то только так.
Вот, есть пакетик. Выглядит неплохо. https://github.com/IsraelOrtuno/Eavquent
Zolotov88
@Zolotov88
Dec 04 2016 18:57
Основной вопрос, куда копать) Я и так и этак) Сначала сделал динамическую связь один (атрибут) ко многим (значениям). С полем type обозначающим класс для связи. Работает, обрадовался. Но как такую связь получить в сущности? Одним запросом никак. Начал мостить полиморфные связи. Все ок, но опять же, если знать из какой связи грузить значения((
dskozin
@dskozin
Dec 04 2016 18:58
@assurrussa А каким образом был реализован механизм?
Artur Gafurov
@assurrussa
Dec 04 2016 18:58
@zlodes я его не смог пнрименить у меня сложнее задача была
у меня на каждый тип атрибутов своя таблица
и работа с типами особая)
@dskozin какой именно, не понимаю что значит механизм?
Zolotov88
@Zolotov88
Dec 04 2016 19:00
@zlodes нет документации там, не понял что делать с ним. Создаю атрибут, как привязать к сущности не понятно(
Artur Gafurov
@assurrussa
Dec 04 2016 19:00
@Zolotov88 елоквент тебе не позволит сделать одним запросом, кроме джойнов
dskozin
@dskozin
Dec 04 2016 19:00
@assurrussa Ну я вижу несколько подходов. Можно делать отдельную таблицу с перечнем атрибутов, потом кросс-таблицу сущность-атрибут-значение, можно например тупо в JSONB поле запихнуть все атрибуты к товару..
Zolotov88
@Zolotov88
Dec 04 2016 19:01
@assurrussa писать запросы самому надо?
Artur Gafurov
@assurrussa
Dec 04 2016 19:01
@dskozin а сколько планируется записей?*
dskozin
@dskozin
Dec 04 2016 19:01
@assurrussa Не ко мне вопрос )
Artur Gafurov
@assurrussa
Dec 04 2016 19:01
@Zolotov88 где то придется, ничего страшного в этом нету
я лично без джойнов все сделал
Zolotov88
@Zolotov88
Dec 04 2016 19:03
@assurrussa Ну, если брать идеал, то помню в ДНС работал. Там было по 40К активных и 40К архивных товаров за раз. У товара от 10 до ста полей.
Но это давно было
Zlatoslav Desyatnikov
@zlodes
Dec 04 2016 19:03
@assurrussa, практика показывает, что лучше в одной таблице держать + нормально индексы настроить, тогда всё оки.
Artur Gafurov
@assurrussa
Dec 04 2016 19:04
@zlodes думал об этом, пока нормально вроде
кол-во запросов просто больше)
Zlatoslav Desyatnikov
@zlodes
Dec 04 2016 19:04
@assurrussa, мы просто несколько подходов тестировали в MySQL на 2млн записей.
Zolotov88
@Zolotov88
Dec 04 2016 19:05
@zlodes А как в одной? Динамически атрибуты туда как пихать?
Artur Gafurov
@assurrussa
Dec 04 2016 19:05
@Zolotov88 он имеет ввиду про атрибуты
Zolotov88
@Zolotov88
Dec 04 2016 19:05
А, понял
Zlatoslav Desyatnikov
@zlodes
Dec 04 2016 19:05
Да.
Zolotov88
@Zolotov88
Dec 04 2016 19:06
Да в общем мне все ясно)
@dskozin Спасибо
KarmaBot
@KarmaBot
Dec 04 2016 19:06
Спасибо (+1) для @dskozin принято! Текущая карма +4.
Zolotov88
@Zolotov88
Dec 04 2016 19:06
@zlodes Спасибо
KarmaBot
@KarmaBot
Dec 04 2016 19:06
Спасибо (+1) для @zlodes принято! Текущая карма +15.
Maksim Kiselev
@MKiselev
Dec 04 2016 19:31
@cleargoal да, мануалов просил же)
Atmden
@Atmden
Dec 04 2016 20:03

Всем привет! Не могу понять как сделать генерацию URL без ? знаков. Т.е. параметры передавать через /.
Пробовал делать

<a href="{{ url('gallery', $image->id) }}">

Получаю ссылку относительно корня. Т.е. mydomain.com/gallery/1
А мне надо относительно текущего url. Т.е. у меня уже открыта страница mydomain.com/ru/gallery и на этой странице я хочу получить mydomain.com/ru/gallery/1

Пробовал делать

<a href="{{ route('gallery', $image->id) }}">

Но получаю ссылку - mydomain.com/ru/gallery?1

Как вместо ? получить /?

KarmaBot
@KarmaBot
Dec 04 2016 20:03
@Atmden, и тебе привет ;)
Atmden
@Atmden
Dec 04 2016 20:05

Или сделать так?

<a href="gallery/{{  $image->id }}">

Но смотрел laravel-5-fundamentals 9 урок... он вроде говорит что не стоит так делать

Ваня Devium
@webdevium
Dec 04 2016 20:15
А у тебя роут как описан?
Atmden
@Atmden
Dec 04 2016 20:16
@webdevium
 Route::get('/gallery', [
        'as' => 'gallery',
        'uses' => 'PagesController@gallery']);
Route::get('/gallery/{id}','PagesController@showalbum');
Ваня Devium
@webdevium
Dec 04 2016 20:17
route('/gallery', [ 'id'=>$image->id ]);
пробуй так
хотя эта штука должна на имя роута натравливаться...
Atmden
@Atmden
Dec 04 2016 20:18
ru/gallery?id=1
такое получил
так тоже пробовал... просто не написал
AnriKo
@AnriKo
Dec 04 2016 21:09
всем доброй ночи, пробую тут выложить сайт на laravel на хостинг и стопорюсь ннемного, клонирую репозиторий с bitbucket. подскажите как клонировать чтобы клонировать только содержимое а не папку с репозиторием, тоесть в результате на хостинте в папке public_html у меня должено быть куча файлов laravela а у меня папа репозитория с bitbucket а в нем уже все файлы, что делать?
KarmaBot
@KarmaBot
Dec 04 2016 21:09
@AnriKo, здравствуй.
Ivan
@Hunternnm
Dec 04 2016 21:11
скопируй все файлы на уровень выше и всё)
AnriKo
@AnriKo
Dec 04 2016 21:22
а как потом это все скопировать в нужную мне папку?
Zlatoslav Desyatnikov
@zlodes
Dec 04 2016 21:35

@AnriKo, это уже не вопросы про laravel так-то.
Для начала, можно указать при клонировании место, куда клонировать.

git clone %repo_uri% .

Точка — в текущую папку. Скорее читать man по git

AnriKo
@AnriKo
Dec 04 2016 21:59
@zlodes понял пойду читать ) спасибо
KarmaBot
@KarmaBot
Dec 04 2016 21:59
Спасибо (+1) для @zlodes принято! Текущая карма +16.
AnriKo
@AnriKo
Dec 04 2016 22:16
может еще кто то не спит ) вот выложил я сайт в папку public_html на сервере, теперь же нужно както все запросы чтобы перенаправлялись в папку public в laravel как это на сервере настроить?
Arsen Soroka
@arsen-s
Dec 04 2016 22:28
@AnriKo сделай рутовской директорией папку public
AnriKo
@AnriKo
Dec 04 2016 22:47
@arsen-s не могу понять )
что значит рутовской
Arsen Soroka
@arsen-s
Dec 04 2016 23:12
@AnriKo у тебя nginx || apache?
хотя это тема оффтопа