Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
PHPUnit позволяет тестировать поля вне зависимости от области видимости с помощью функций вида assertAttribute..., например: assertAttributeSame('somestr', 'strProp', $obj);
А контроллер, без велосипедов, замокать можно?
Ты придумал плохой тест.
Это никак не протестируешь (если не мокать магические методы).
Можно сделать установку значений через setUtmSource() и setUtmTerm() методы и замокать контроллер TopPageController. Но и это проблемотично, насколько знаю, laravel не пользволяет из коробки мокать контроллеры. Придется с роутами играться.
В идеале - контроллер обращается как-то к IoC (будь это фасад, прямое обращение app или DI) и достает оттуда некий класс, сеттер меток.
В тесте ты мочишь этот класс (мочишь вызов методов setUtmSource и setUtmTerm, сравниваешь ожидаемые аргументы и реальные) и этот мок кладешь в IoC.
Кстати, ты юзаешь $response = $this->get('/?utm_source=google&utm_term=keyword1%20keyword2'); - это уже не unit тест.
P.S. Научится писать тестируемый код должен каждый разработчик.
Гораздо лучше в этом случае иметь хоть и толстый, но достаточно комментированный и структурированный метод в контроллере
Больше 10 строк кода (условно) в экшене контроллера - плохо.
Насколько правильным будет сделать Event нового заказа, а такие параметры, как проверка на ввод адреса доставки, вынести в отдельный Listener и реализовывать бизнес-логику, связанную именно с данным параметром, именно в данном "слушателе"?
Норм. Главное придерживаться одной стилистики кода.
Я, в своих приложениях, разделаю валидацию на "аттрибутную" и "логическую".
Аттрибутная - просто проверяю, что значения валидны и дальнейший код, который с ним работает, не будет падать.
Логическая - уже разлетается по системе. Например проверка свободного номера в отеле. С одной стороны можно просто в реквесте добавить валидацию на признак свободности, но, а если мы хотим вип персонам предоставлять любой номер и выгонять текущих поселенцев? Если расширять валидацию реквеста, то как-то слишком жирно и не гибко.
Так-же бывают случаи, что заранее в реквесте неизвестны какие-то параметры и их нельзя узнать, не прибегая к грязному коду (например супер сложный подсчет скидок машин лернинга, в реквесте дергать какое-то апи скидок для валидации - очень спорно). Поэтому выносить сложную валидацию из реквеста - нормально.
По умолчанию - выноси все в реквест. Как только что-то усложняется, надо думать как логику красиво размазать по системе.
Есть куча разных паттернов, наиболее удачный и правильный вариант - это наиболее удобный для твоего проекта (правда чтобы понять, что будет удобным - нужна какая никакая компетенция в этих вопросах).
Сделай OrderService с методом ->store(...args), в котором и проверяй всю сложную логику. Результат функции либо true, либо Exception (с ошибками валидации или иными ошибками логики).
Не понравится - логику можно будет легко разнести, если точка создания заказа одна (->store()).
Когда я раньше пробывал попасть в фирмы, везде хотели видеть портфолио, либо выполнение тз, но уровень знаний не позволял проходить.
Сложно добавлять себе в портфолио проект, который делала целая команда. Вряд-ли кто-то из разработчиков carprice добавил себе проект в портфолио. Обычно спрашивают где работал и что сделал на работе, какую пользу принес. Спрашивают портфолио у разработчиков в основном на фрилансе, это, наверное, удобнейший способ понять скил исполнителя без технического интервью. Так-же, иногда, портфолио спрашивают веб-студии/агенста, но это, на мой взгляд, отдельная каста. Между фрилансом и веб студией - выбор очевиден.
либо несоизмеримо круче и не особо делились знаниями.
Интересно какими секретными свединиями они обладают.
А сейчас вот хочу в более менее приличное место попасть.
Если у тебя где-то спрашивают портфолио, в офис, то вряд-ли это "приличное" место.
https://habr.com/post/260201/
Статья немного устарела, вместо вагранта - докер, вместо php5 - php7, Twig/Mercurial/Twitter Bootstrap - можно забить, английский - спорно.
Это будет полезней портфолио. Пара книг, несколько технологий и ты в ТОП-20 Российских IT команий (если живешь в РФ) на позиции мидла.
Но какие сейчас априори модули для laravel, без которых прям ни один более менее серьёзный проект не обходится?
Что такое "серьезный"? С какого момента проект начинает считаться серьезным, на твой взгляд? Я, сходу, не смог вспомнить хотя бы два похожих проекта, которыми я занимался на ларавеле.
Если хочешь в офис - портфолио не требуется (надеюсь ты не собираешься в интернет-агенства/веб-студии).
Не знаю в какой стране ты живешь, но в РФ практически все хорошие специалисты в крупных компаниях либо в стартапах, т.е. не советую идти в офис пока уровень экспертизы не дорастет до мидла, чтобы была возможность попасть в хорошую команду. На фрилансе этого уровня можно добиться в разы быстрее (раз уже такая возможность есть).
Если уж очень хочется переехать и в офис - то лучше читай хорошие книги, на интервью своим портфолио не похвастаешься (если конечно ты не сделал что-то действительно крутое).
Проект для саморазвития - тут только тебе выбирать, в первую очередь тебе должно быть интересно его делать.
P.S. сужу по своему опыту
php artisan clear-compiled
Эта команда так-же выполняет composer du (composer dump-autoload).
Покажи composer.json.
В PHP нет из коробки поддержки автоподгрузки класса по его namespace, но тем не менее, классы почему-то автоматически подгружаются. Советую разобраться с spl_autoload_register и psr-4. Без понимания этих мезанизмов не редко возникают проблемы (например, если в классе есть синтаксическая ошибка, то не редко ты увидишь ошибку Class not found, а не ошибку компиляции).
У тебя вопросы на несколько статей.
Попробуй посмотреть готовое решение - https://github.com/davejamesmiller/laravel-breadcrumbs или познакомься с работой https://octobercms.com/
А можно не возиться с установкой redis На удаленной машине, а просто использовать database драйвер? Так тоже работает. Или здесь есть какие-то недостатки по сравнению с редисом? Резонный вопрос, т.к. БД уже и так установлена, а РЕДИС еще придется ставить на убунту. Зачем делать больше )))
Я по умолчанию использую database, ухожу в редис или куда-то еще - если того требует ситуация. Пробежаться по бд и посмотреть что там с джобами легче и приятней, чем возиться с редисом.
Для наглядности попробуй database драйвер, раз таблица все равно создана (чтобы вручную в редис не ходить). Табличка jobs должна наполняться строчками, 1 строка - 1 отложенная команда.
И проверь ларавел логи.
(я надеюсь ты сам воркер запустил)
Отдавать Location и использовать статус 200 - не предусмотрено протоколом http и ни один браузер не готов к такому.
А какую оценку ты ждешь? Наверняка ты сам догадываешься, что это все не очень. Для проекта с 6 тривиальными моделями - вообще без разницы.
Все проблемы появляются при усложнении логики.
По поводу количества комментариев - насколько я знаю, в ларавел из коробки нет подходящего функционала, есть решения через объявление отношения, которое по факту возвращает только количество связанных сущностей, но, это такое.
Доставать отдельным запросом - нормальный вариант, только обычно стараются это делать не в контроллере и как-то максимально реюзабельно. А если говорить о больших проектах - так там вообще денормализация БД, запросы COUNT(*) не делают, а следят за счетчиками в коде + кэши и т.п.
Работает - и ладно Все когда-то так начинали.
простите шифт+шифт ничего не вызывает, версия для проекта в рнр указанна 7.1
быстрое двукратное нажание на shift - это стандартный шорткат phpstorm для "search everywhere".
Посмотрите в keymap у себя какой шорткат стоит для search everywhere
shift + shift, в окно вписать "current file", открыть configure current file analyze, опустить ползунок до самого низа
У меня пишет 4 ошибки и 1.5к варнингов.
Какая версия пхп в настройках шторма для проекта?
Но все равно вопрос- где хранить какие нить сквозные переменные для приложения.
Как правило добавляют какой нибудь ComposerServiceProvider и добавляют туда
https://laravel.com/docs/5.6/providers
https://laravel.com/docs/master/views#p … a-to-views
View::share
Но, если, скажем, сайдбар с рекламой адсенса надо отключать на продвигаемых статьях - то тут проблемы, как и у любого шаблонизатора.
Хорошие решения есть, но они громоздкие, встречал я их только в специфичных проектах, где гибкость шаблона крайне важна.
В зависимости от верстки. Я в нужных шаблонах наследовался от разных шаблонов.
@extends('with_sidebar_layout')
@extends('without_sidebar_layout')
Если хочется сайтбар отключать в рантайме, в зависимости от каких-либо факторов - то тут надо обсуждать предметно (от чего зависит сайдбар). Простых решений, насколько я знаю, laravel и blade не предоставляют.
Blade - простой шаблонизатор. Долгое время бэкенд и фронтенд были связанными. На текущий день нет необходимости в разработке в том-же духе, бэкенд и фронтенд легко разделяются. Все ситуативно, кому как кажется лучше.
Популярный фронтенд фреймворк, который так-же продвигается и "ларавером" - Vue.js. Принцип его взаимодействия с бэкендом такой-же, как и, практически, везде - rest-like api.
Да, вполне допустим. Только лучше через ORM и scope
$commentsCount = Comments::forPost($post)->count();
какая ошибка?
Вижу только синтаксическую
Было
$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();
Для наглядности перенес одну строку
Посмотри результат выполнения команды top в терминале (ssh).
Есть проблема - сайт долго грузится, иногда отваливается, может ли это происходить из-за слабого сервера такой конфигурации (хостер тайвеб)
Да, вполне такое может происходить.
Какие вообще минимальные или рекомендуемые параметры железа должны быть?
Зависит от разных факторов. Чем больше всего - тем лучше.
Для начала надо выяснить в чем затык.
Вот 3 параметра, которые очень тесно связаны:
1 - Потребление приложением ОЗУ на 1 пользовательский запрос
2 - Время обработки одного пользовательского запроса
3 - Нагрузка на сервер (например для расчета можно учитывать количество запросов в минуту).
Простыми подсчетами на пальцах можно предположить, чего не хватает и в какую сторону "апгрейдится".
В вашем случае виджеты являются хорошим решением.
Это мое мнение, вы можете согласится или нет.
Тема виджетов мне неинтересна, чтобы дискутировать о ней.
Я уверен многим они нравятся и реально помогают в работе.
Также, я не высказывался никаких претензий.
Чем же оно сомнительное? Я использую виджеты абсолютно везде. Очень удобно. Готовая бутстраповская разметка за просто так. В общем пока только виджеты удерживают меня от перехода.
Ну, такой подход давно считается мертвым. Годится для админок и прототипов, или для мелких сайтов, в общем, как дело касается коммерции - так виджеты перестают быть удобными.
Сейчас фронтенд разработка это намного больше чем html/css.
Подход с виджетами хорошо живет во многих CMS, но это отдельная каста.