Laravel по-русски

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

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

#1 Re: Laravel 5.x » Тестирование: как проверить значения переменных в методе контроллера » 05.08.2018 14:42:57

PHPUnit позволяет тестировать поля вне зависимости от области видимости с помощью функций вида assertAttribute..., например: assertAttributeSame('somestr', 'strProp', $obj);

А контроллер, без велосипедов, замокать можно?

#2 Re: Laravel 5.x » Тестирование: как проверить значения переменных в методе контроллера » 03.08.2018 17:36:20

Ты придумал плохой тест.

Это никак не протестируешь (если не мокать магические методы).

Можно сделать установку значений через setUtmSource() и setUtmTerm() методы и замокать контроллер TopPageController. Но и это проблемотично, насколько знаю, laravel не пользволяет из коробки мокать контроллеры. Придется с роутами играться.

В идеале - контроллер обращается как-то к IoC (будь это фасад, прямое обращение app или DI) и достает оттуда некий класс, сеттер меток.
В тесте ты мочишь этот класс (мочишь вызов методов setUtmSource и setUtmTerm, сравниваешь ожидаемые аргументы и реальные) и этот мок кладешь в IoC.

Кстати, ты юзаешь $response = $this->get('/?utm_source=google&utm_term=keyword1%20keyword2'); - это уже не unit тест.

P.S. Научится писать тестируемый код должен каждый разработчик.

#3 Re: Laravel 5.x » Правильная архитектура при большом кол-ве вводных данных » 02.07.2018 11:49:55

Гораздо лучше в этом случае иметь хоть и толстый, но достаточно комментированный и структурированный метод в контроллере

Больше 10 строк кода (условно) в экшене контроллера - плохо.

#4 Re: Laravel 5.x » Правильная архитектура при большом кол-ве вводных данных » 02.07.2018 11:46:56

Насколько правильным будет сделать Event нового заказа, а такие параметры, как проверка на ввод адреса доставки, вынести в отдельный Listener и реализовывать бизнес-логику, связанную именно с данным параметром, именно в данном "слушателе"?

Норм. Главное придерживаться одной стилистики кода.
Я, в своих приложениях, разделаю валидацию на "аттрибутную" и "логическую".
Аттрибутная - просто проверяю, что значения валидны и дальнейший код, который с ним работает, не будет падать.
Логическая - уже разлетается по системе. Например проверка свободного номера в отеле. С одной стороны можно просто в реквесте добавить валидацию на признак свободности, но, а если мы хотим вип персонам предоставлять любой номер и выгонять текущих поселенцев? Если расширять валидацию реквеста, то как-то слишком жирно и не гибко.
Так-же бывают случаи, что заранее в реквесте неизвестны какие-то параметры и их нельзя узнать, не прибегая к грязному коду (например супер сложный подсчет скидок машин лернинга, в реквесте дергать какое-то апи скидок для валидации - очень спорно). Поэтому выносить сложную валидацию из реквеста - нормально.

По умолчанию - выноси все в реквест. Как только что-то усложняется, надо думать как логику красиво размазать по системе.
Есть куча разных паттернов, наиболее удачный и правильный вариант - это наиболее удобный для твоего проекта (правда чтобы понять, что будет удобным - нужна какая никакая компетенция в этих вопросах).

Сделай OrderService с методом ->store(...args), в котором и проверяй всю сложную логику. Результат функции либо true, либо Exception (с ошибками валидации или иными ошибками логики).
Не понравится - логику можно будет легко разнести, если точка создания заказа одна (->store()).

#5 Re: Поиск работы » Помогите придумать достойное ТЗ для современного портфолио. » 25.06.2018 11:29:21

Когда я раньше пробывал попасть в фирмы, везде хотели видеть портфолио, либо выполнение тз, но уровень знаний не позволял проходить.

Сложно добавлять себе в портфолио проект, который делала целая команда. Вряд-ли кто-то из разработчиков carprice добавил себе проект в портфолио. Обычно спрашивают где работал и что сделал на работе, какую пользу принес. Спрашивают портфолио у разработчиков в основном на фрилансе, это, наверное, удобнейший способ понять скил исполнителя без технического интервью. Так-же, иногда, портфолио спрашивают веб-студии/агенста, но это, на мой взгляд, отдельная каста. Между фрилансом и веб студией - выбор очевиден.

либо несоизмеримо круче и не особо делились знаниями.

Интересно какими секретными свединиями они обладают.

А сейчас вот хочу в более менее приличное место попасть.

Если у тебя где-то спрашивают портфолио, в офис, то вряд-ли это "приличное" место.

https://habr.com/post/260201/
Статья немного устарела, вместо вагранта - докер, вместо php5 - php7, Twig/Mercurial/Twitter Bootstrap - можно забить, английский - спорно.
Это будет полезней портфолио. Пара книг, несколько технологий и ты в ТОП-20 Российских IT команий (если живешь в РФ) на позиции мидла.


Но какие сейчас априори модули для laravel, без которых прям ни один более менее серьёзный проект не обходится?

Что такое "серьезный"? С какого момента проект начинает считаться серьезным, на твой взгляд? Я, сходу, не смог вспомнить хотя бы два похожих проекта, которыми я занимался на ларавеле.

#6 Re: Поиск работы » Помогите придумать достойное ТЗ для современного портфолио. » 23.06.2018 04:11:17

Если хочешь в офис - портфолио не требуется (надеюсь ты не собираешься в интернет-агенства/веб-студии).

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

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

Проект для саморазвития - тут только тебе выбирать, в первую очередь тебе должно быть интересно его делать.

P.S. сужу по своему опыту

#7 Re: Laravel 5.x » После создания новой модели, предыдущая не может быть найдена » 22.06.2018 18:14:20

php artisan clear-compiled

Эта команда так-же выполняет composer du (composer dump-autoload).

Покажи composer.json.

В PHP нет из коробки поддержки автоподгрузки класса по его namespace, но тем не менее, классы почему-то автоматически подгружаются. Советую разобраться с spl_autoload_register и psr-4. Без понимания этих мезанизмов не редко возникают проблемы (например, если в классе есть синтаксическая ошибка, то не редко ты увидишь ошибку Class not found, а не ошибку компиляции).

#8 Re: Laravel 5.x » Как правильно сделать и использовать небольшой сервис в ларавеле. » 22.06.2018 16:04:23

У тебя вопросы на несколько статей.
Попробуй посмотреть готовое решение - https://github.com/davejamesmiller/laravel-breadcrumbs или познакомься с работой https://octobercms.com/

#9 Re: Laravel 5.x » Почему не срабатывает отложенное задание из очереди redis? » 20.06.2018 23:19:53

А можно не возиться с установкой redis На удаленной машине, а просто использовать database драйвер? Так тоже работает. Или здесь есть какие-то недостатки по сравнению с редисом? Резонный вопрос, т.к. БД уже и так установлена, а РЕДИС еще придется ставить на убунту. Зачем делать больше )))

Я по умолчанию использую database, ухожу в редис или куда-то еще - если того требует ситуация. Пробежаться по бд и посмотреть что там с джобами легче и приятней, чем возиться с редисом.

#10 Re: Laravel 5.x » Почему не срабатывает отложенное задание из очереди redis? » 20.06.2018 21:47:40

Для наглядности попробуй database драйвер, раз таблица все равно создана (чтобы вручную в редис не ходить). Табличка jobs должна наполняться строчками, 1 строка - 1 отложенная команда.
И проверь ларавел логи.

(я надеюсь ты сам воркер запустил)

#11 Re: Laravel 5.x » Location и status 200 » 20.06.2018 14:23:51

Отдавать Location и использовать статус 200 - не предусмотрено протоколом http и ни один браузер не готов к такому.

#12 Re: Laravel 5.x » Мой первый блог на laravel » 19.06.2018 15:16:28

А какую оценку ты ждешь? Наверняка ты сам догадываешься, что это все не очень. Для проекта с 6 тривиальными моделями - вообще без разницы.
Все проблемы появляются при усложнении логики.

По поводу количества комментариев - насколько я знаю, в ларавел из коробки нет подходящего функционала, есть решения через объявление отношения, которое по факту возвращает только количество связанных сущностей, но, это такое.
Доставать отдельным запросом - нормальный вариант, только обычно стараются это делать не в контроллере и как-то максимально реюзабельно. А если говорить о больших проектах - так там вообще денормализация БД, запросы COUNT(*) не делают, а следят за счетчиками в коде + кэши и т.п.

Работает - и ладно smile Все когда-то так начинали.

#13 Re: Laravel 5.x » Laravel и ide-helper » 09.06.2018 19:42:01

простите шифт+шифт ничего не вызывает, версия для проекта в рнр указанна 7.1

быстрое двукратное нажание на shift - это стандартный шорткат phpstorm для "search everywhere".
Посмотрите в keymap у себя какой шорткат стоит для search everywhere

#14 Re: Laravel 5.x » Laravel и ide-helper » 09.06.2018 17:20:47

shift + shift, в окно вписать "current file", открыть configure current file analyze, опустить ползунок до самого низа

#15 Re: Laravel 5.x » Laravel и ide-helper » 09.06.2018 17:16:09

У меня пишет 4 ошибки и 1.5к варнингов.

Какая версия пхп в настройках шторма для проекта?

#16 Re: Laravel 5.x » Как лучше организовать настройки шаблона (views) » 07.06.2018 14:09:20

Но все равно вопрос- где хранить какие нить сквозные переменные для приложения.

Как правило добавляют какой нибудь ComposerServiceProvider и добавляют туда
https://laravel.com/docs/5.6/providers
https://laravel.com/docs/master/views#p … a-to-views
View::share

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

#17 Re: Laravel 5.x » Как лучше организовать настройки шаблона (views) » 06.06.2018 16:54:27

В зависимости от верстки. Я в нужных шаблонах наследовался от разных шаблонов.
@extends('with_sidebar_layout')
@extends('without_sidebar_layout')

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

#18 Re: Хорошие практики (FAQ) » Правильная техника написания сервера » 06.06.2018 16:47:05

Blade - простой шаблонизатор. Долгое время бэкенд и фронтенд были связанными. На текущий день нет необходимости в разработке в том-же духе, бэкенд и фронтенд легко разделяются. Все ситуативно, кому как кажется лучше.
Популярный фронтенд фреймворк, который так-же продвигается и "ларавером" - Vue.js. Принцип его взаимодействия с бэкендом такой-же, как и, практически, везде - rest-like api.

#19 Re: Laravel 5.x » Количество комментарий » 04.06.2018 16:31:31

Да, вполне допустим. Только лучше через ORM и scope

$commentsCount = Comments::forPost($post)->count();

#20 Re: Laravel 5.x » Не могу создать запрос к базе данных » 31.05.2018 18:19:13

какая ошибка?
Вижу только синтаксическую

Было

$purcases = DB::table('purchases')
            ->whereNull('tracker_number')
            ->whereDate('created_at','=', Carbon::today()->toDateString())
            ->join('goods', function ($join) {
                $join->on('purchases.good_id', '=', 'goods.id');
                ->where('goods.test_product','=','0');
            })
            ->get();

Надо

$purcases = DB::table('purchases')
            ->whereNull('tracker_number')
            ->whereDate('created_at','=', Carbon::today()->toDateString())
            ->join('goods', function ($join) {
                $join->on('purchases.good_id', '=', 'goods.id')->where('goods.test_product','=','0');
            })
            ->get();

Для наглядности перенес одну строку

#22 Re: Laravel 5.x » Системные требования Laravel к хостингу, сайт тормозит =) » 03.05.2018 22:43:36

Есть проблема - сайт долго грузится, иногда отваливается, может ли это происходить из-за слабого сервера такой конфигурации (хостер тайвеб)

Да, вполне такое может происходить.

Какие вообще минимальные или рекомендуемые параметры железа должны быть?

Зависит от разных факторов. Чем больше всего - тем лучше.
Для начала надо выяснить в чем затык.

Вот 3 параметра, которые очень тесно связаны:
1 - Потребление приложением ОЗУ на 1 пользовательский запрос
2 - Время обработки одного пользовательского запроса
3 - Нагрузка на сервер (например для расчета можно учитывать количество запросов в минуту).

Простыми подсчетами на пальцах можно предположить, чего не хватает и в какую сторону "апгрейдится".

#23 Re: Laravel 5.x » Стоит ли переходить с Yii2? » 25.04.2018 18:29:52

В вашем случае виджеты являются хорошим решением.

#24 Re: Laravel 5.x » Стоит ли переходить с Yii2? » 25.04.2018 13:21:42

Это мое мнение, вы можете согласится или нет.
Тема виджетов мне неинтересна, чтобы дискутировать о ней.
Я уверен многим они нравятся и реально помогают в работе.
Также, я не высказывался никаких претензий.

#25 Re: Laravel 5.x » Стоит ли переходить с Yii2? » 25.04.2018 11:57:34

Чем же оно сомнительное? Я использую виджеты абсолютно везде. Очень удобно. Готовая бутстраповская разметка за просто так. В общем пока только виджеты удерживают меня от перехода.

Ну, такой подход давно считается мертвым. Годится для админок и прототипов, или для мелких сайтов, в общем, как дело касается коммерции - так виджеты перестают быть удобными.
Сейчас фронтенд разработка это намного больше чем html/css.

Подход с виджетами хорошо живет во многих CMS, но это отдельная каста.

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