Обнаружение проблем n+1 через лотерейный подход, то есть запускаем проверку не каждый раз, а с некоторым шансом. Также как сделана в Laravel очистка сессий.
https://timacdonald.me/introducing-lazy-loading-prevention-into-an-existing-laravel-application/
👉 @php_lib
https://timacdonald.me/introducing-lazy-loading-prevention-into-an-existing-laravel-application/
👉 @php_lib
👍1
Ресурсы для API в Laravel
Вы узнаете, что такое Ресурсы и как их использовать для API в Laravel-приложениях.
Ресурсы (Resources) — дополнительный слой поверх Eloquent-моделей. Они позволяют поддерживать единый формат возвращаемых данных. Плюс позволяют отсекать лишние или секретные данные, например, пароли и токены.
#Laravel
👉 @php_lib
Вы узнаете, что такое Ресурсы и как их использовать для API в Laravel-приложениях.
Ресурсы (Resources) — дополнительный слой поверх Eloquent-моделей. Они позволяют поддерживать единый формат возвращаемых данных. Плюс позволяют отсекать лишние или секретные данные, например, пароли и токены.
#Laravel
👉 @php_lib
👍2
😁8👍1👏1
Готовимся к собеседованию по PHP: Что такое «DI», «Container», «Auto-wiring» за семь простых шагов
Статья написана для начинающих разработчиков на языке PHP, чтобы помочь им усвоить понятия, нужные для понимания того, как устроены и работают современные фреймворки на PHP: Dependency Injection, Container, Auto-wiring.
#PHP #Symfony #Yii #Laravel
👉 @php_lib
Статья написана для начинающих разработчиков на языке PHP, чтобы помочь им усвоить понятия, нужные для понимания того, как устроены и работают современные фреймворки на PHP: Dependency Injection, Container, Auto-wiring.
#PHP #Symfony #Yii #Laravel
👉 @php_lib
Хабр
Готовимся к собеседованию по PHP: Что такое «DI», «Container», «Auto-wiring» за семь простых шагов
Для кого и для чего написана статья? Статья написана для начинающих разработчиков на языке PHP, чтобы помочь им усвоить понятия, нужные для понимания того, как устроены и работают современные...
👍3
Копирование объектов классов
При присваивании объекта класса другой переменной создается новая ссылка на тот же объект.
class Person{
public $name;
function __construct($name){
$this->name = $name;
}
}
$tom = new Person("Tom");
$bob = $tom;
$bob->name = "Bob";
echo $tom->name; // Bob
👉 @php_lib
При присваивании объекта класса другой переменной создается новая ссылка на тот же объект.
class Person{
public $name;
function __construct($name){
$this->name = $name;
}
}
$tom = new Person("Tom");
$bob = $tom;
$bob->name = "Bob";
echo $tom->name; // Bob
👉 @php_lib
Telegraph
Копирование объектов классов
При присваивании объекта класса другой переменной создается новая ссылка на тот же объект. Например: class Person{ public $name; function __construct($name){ $this->name = $name; } } $tom = new Person("Tom"); $bob = $tom;…
👍2
Типизация данных
В отличие от ряда языков программирования в PHP при определении переменных или параметров функций можно не указывать тип данных. Однако в принципе PHP в ряде ситуаций - при определении свойств классов, параметров или возвращаемого значения функций - позволяет указать тип данных. Установка типа данных позволит избежать ситуаций, когда в программу будут переданы данные не тех типов, которые ожидалась разработчиком. Далее
👉 @php_lib
В отличие от ряда языков программирования в PHP при определении переменных или параметров функций можно не указывать тип данных. Однако в принципе PHP в ряде ситуаций - при определении свойств классов, параметров или возвращаемого значения функций - позволяет указать тип данных. Установка типа данных позволит избежать ситуаций, когда в программу будут переданы данные не тех типов, которые ожидалась разработчиком. Далее
👉 @php_lib
Telegraph
Типизация данных
В отличие от ряда языков программирования в PHP при определении переменных или параметров функций можно не указывать тип данных. Однако в принципе PHP в ряде ситуаций - при определении свойств классов, параметров или возвращаемого значения функций - позволяет…
👍3
Статический анализ в PHP
Все мы привыкли к определению, что PHP – это язык со слабой динамической типизацией. В этом одновременно его преимущество и недостаток. Преимущества заключаются в том, что вы имеете больше возможностей по работе с динамическими данными: вызывать функции или объекты из строки, передавать и возвращать mixed типы и многое другое.
👉 @php_lib
Все мы привыкли к определению, что PHP – это язык со слабой динамической типизацией. В этом одновременно его преимущество и недостаток. Преимущества заключаются в том, что вы имеете больше возможностей по работе с динамическими данными: вызывать функции или объекты из строки, передавать и возвращать mixed типы и многое другое.
👉 @php_lib
👍3
Пробуем KPHP: реально ли его использовать в своих проектах
ВК - крупнейшая социальная сеть в России. Её код изначально был написан на PHP - языке, позволяющим быстро реализовывать функционал веб-сайтов. Однако, PHP является интерпретируемым языком, что само собой не есть хорошо для высоких нагрузок. Далее
#KPHP
👉 @php_lib
ВК - крупнейшая социальная сеть в России. Её код изначально был написан на PHP - языке, позволяющим быстро реализовывать функционал веб-сайтов. Однако, PHP является интерпретируемым языком, что само собой не есть хорошо для высоких нагрузок. Далее
#KPHP
👉 @php_lib
👍2
Как обновить большие массивы данных в Laravel
Иногда вам необходимо обновить данные в вашей базе данных. Самая простая возможность - просто запустить обновление в базе данных MySQL. Но это не всегда работает. Особенно если вы используете события или хотите обновить отношения .....
https://42coders.com/how-to-update-large-data-in-laravel
#Laravel
👉 @php_lib
Иногда вам необходимо обновить данные в вашей базе данных. Самая простая возможность - просто запустить обновление в базе данных MySQL. Но это не всегда работает. Особенно если вы используете события или хотите обновить отношения .....
https://42coders.com/how-to-update-large-data-in-laravel
#Laravel
👉 @php_lib
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
🧪 PhpStorm Tips & Tricks
Did you know that PhpStorm has a shortcut to do that? It's called "Move Caret To Matching Brace ", and it also works for HTML tags 🔥
👉 @php_lib
Did you know that PhpStorm has a shortcut to do that? It's called "Move Caret To Matching Brace ", and it also works for HTML tags 🔥
👉 @php_lib
Как запускать долгоживущие скрипты на удаленном сервере
Зачастую приходится на удаленном сервере запускать скрипты вручную. К примеру, для миграции данных из одного хранилища в другое. Как обычно это происходит: заходим на сервак по ssh, запускаем скрипт, он там нам выводит какой-то прогресс (например, обработанные ID), после чего завершается. Однако, часто бывает так, что нужно запустить долгоживущий скрипт. Мне приходилось запускать скрипты, выполняющиеся несколько дней подряд. При этом, нельзя гарантировать что ssh-соединение не разорвётся из-за нестабильного интернета. Далее
👉 @php_lib
Зачастую приходится на удаленном сервере запускать скрипты вручную. К примеру, для миграции данных из одного хранилища в другое. Как обычно это происходит: заходим на сервак по ssh, запускаем скрипт, он там нам выводит какой-то прогресс (например, обработанные ID), после чего завершается. Однако, часто бывает так, что нужно запустить долгоживущий скрипт. Мне приходилось запускать скрипты, выполняющиеся несколько дней подряд. При этом, нельзя гарантировать что ssh-соединение не разорвётся из-за нестабильного интернета. Далее
👉 @php_lib
Telegraph
Как запускать долгоживущие скрипты на удаленном сервере
Зачастую приходится на удаленном сервере запускать скрипты вручную. К примеру, для миграции данных из одного хранилища в другое. Как обычно это происходит: заходим на сервак по ssh, запускаем скрипт, он там нам выводит какой-то прогресс (например, обработанные…
👍9🔥1
Как использовать Psalm на легаси проекте
Если вы задумались о необходимости использования Psalm'а на большом легаси проекте, вам нужно подумать, что делать с текущими ошибками, которых наверняка может быть больше тысячи.
Править их все сразу — это мог быть правильный вариант, если не был бы таким утомительным и долгим.
Глобально подавлять ошибки — это однозначно плохой способ, так как повлияет и на новый код.
Конфиг
Можно воспользоваться конфигом псалма и заигнорировать те директории, где расположен старый код. Однако в таком варианте необходимо, чтобы старый код был однозначно локализован. Такое возможно при наличии некоего подобия модулей, чем может похвастаться далеко не каждый легаси проект.
Этот способ имеет ещё один недостаток: наверняка вы до сих пор что-то правите в этих модулях, и тогда ваш новый код в старых модулях тоже не будет проанализирован псалмом. Но вы же не этого добивались?
psalm-baseline
У псалма есть решение для таких случаев —
У вас в проекте появится
И так до тех пор, пока вы не избавитесь от всех ошибок, либо не удалите модули, заменив их новыми.
👉 @php_lib
Если вы задумались о необходимости использования Psalm'а на большом легаси проекте, вам нужно подумать, что делать с текущими ошибками, которых наверняка может быть больше тысячи.
Править их все сразу — это мог быть правильный вариант, если не был бы таким утомительным и долгим.
Глобально подавлять ошибки — это однозначно плохой способ, так как повлияет и на новый код.
Конфиг
Можно воспользоваться конфигом псалма и заигнорировать те директории, где расположен старый код. Однако в таком варианте необходимо, чтобы старый код был однозначно локализован. Такое возможно при наличии некоего подобия модулей, чем может похвастаться далеко не каждый легаси проект.
<psalm>
....
<projectFiles>
<directory name="src"/>
<ignoreFiles>
<directory name="src/Module1"/>
<directory name="src/Module2"/>
<directory name="src/Module3"/>
</ignoreFiles>
</projectFiles>
....
</psalm>
Этот способ имеет ещё один недостаток: наверняка вы до сих пор что-то правите в этих модулях, и тогда ваш новый код в старых модулях тоже не будет проанализирован псалмом. Но вы же не этого добивались?
psalm-baseline
У псалма есть решение для таких случаев —
baseline
. Данный способ найдёт и сохранит все текущие ошибки в конкретный xml
файл и будет их игнорировать при анализе. Также вам не придётся игнорировать директории и глобально подавлять ошибки. Зато новый код в любых директориях — новых и старых — будет успешно проанализирован псалмом. Чтобы настроить baseline,
вам необходимо выполнить следующую команду в вашем проекте:
./vendor/bin/psalm --set-baseline=psalm-baseline.xml
У вас в проекте появится
psalm-baseline.xml
файл, который необходимо закоммитить. Теперь вы сможете спокойно использовать psalm в CI.
Только не забывайте в свободное время править ошибки в старых модулях. Когда вы поправите часть из них, обновите baseline
: ./vendor/bin/psalm --update-baseline
И так до тех пор, пока вы не избавитесь от всех ошибок, либо не удалите модули, заменив их новыми.
👉 @php_lib
👍4
В Yii Debug добавлена поддержка yiisoft/view версии ^6.0 (PR)
https://github.com/yiisoft/yii-debug
👉 @php_lib
https://github.com/yiisoft/yii-debug
👉 @php_lib
GitHub
GitHub - yiisoft/yii-debug: Yii debug panel extension
Yii debug panel extension. Contribute to yiisoft/yii-debug development by creating an account on GitHub.
👍1
⚡️ #yiisoftYiiCycle
В пакете Yii Cycle ORM добавили поддержку
👉 @php_lib
В пакете Yii Cycle ORM добавили поддержку
psr/simple-cache
версий ^2.0
и ^3.0
(PR).👉 @php_lib
GitHub
GitHub - yiisoft/yii-cycle: Cycle ORM support for Yii
Cycle ORM support for Yii. Contribute to yiisoft/yii-cycle development by creating an account on GitHub.
👍1
Статический анализ и уже выросший проект: внедрять нельзя откладывать
Зачем нужен статический анализ кода, кажется, никому объяснять сегодня уже не нужно. Но одно дело — поддерживать код «чистым» с первого коммита, и совсем другое — встраивать новый инструмент в проект, который за несколько лет успел разрастись и пережить несколько итераций глобального рефакторинга. Мы работаем с большим количеством плохо документированных источников данных, а статический анализ кода помогает учитывать самые разные граничные случаи. Далее
👉 @php_lib
Зачем нужен статический анализ кода, кажется, никому объяснять сегодня уже не нужно. Но одно дело — поддерживать код «чистым» с первого коммита, и совсем другое — встраивать новый инструмент в проект, который за несколько лет успел разрастись и пережить несколько итераций глобального рефакторинга. Мы работаем с большим количеством плохо документированных источников данных, а статический анализ кода помогает учитывать самые разные граничные случаи. Далее
👉 @php_lib
👍3
Overriding vendor classes
Один из хардкорных способов избавиться от класса, используемого по всему проекту, при рефакторинге — это убрать его из автозагрузки и под тем же неймспейсом загрузить другой. На эту тему есть плагины для композера, но что если это можно сделать и без них? Автор статьи подробно рассказывает, как этого можно добиться нативными средствами пакетного менеджера.
https://downing.tech/posts/overriding-vendor-classes
👉 @php_lib
Один из хардкорных способов избавиться от класса, используемого по всему проекту, при рефакторинге — это убрать его из автозагрузки и под тем же неймспейсом загрузить другой. На эту тему есть плагины для композера, но что если это можно сделать и без них? Автор статьи подробно рассказывает, как этого можно добиться нативными средствами пакетного менеджера.
https://downing.tech/posts/overriding-vendor-classes
👉 @php_lib
👍2
Паттерн Action-Domain-Responder (Eng)
Является усовершенствованием паттерна Model-View-Controller и более удобен для создания веб-приложений.
Большинство фреймворков на данный момент использует MVC. Впервые он был представлен в 70-х годах и предназначался для разработки десктопных приложений. Несмотря на это, в течении долгого времени, паттерн используется и для веб-приложений.
В этой статье мы познакомимся с паттерном Action-Domain-Responder (ADR — Действие-Домен-Ответчик) и научимся его применять в Laravel.
👉 @php_lib
Является усовершенствованием паттерна Model-View-Controller и более удобен для создания веб-приложений.
Большинство фреймворков на данный момент использует MVC. Впервые он был представлен в 70-х годах и предназначался для разработки десктопных приложений. Несмотря на это, в течении долгого времени, паттерн используется и для веб-приложений.
В этой статье мы познакомимся с паттерном Action-Domain-Responder (ADR — Действие-Домен-Ответчик) и научимся его применять в Laravel.
👉 @php_lib
ArchTech Forum
Pattern: Action-Domain-Responder (ADR) | ArchTech Forum
Most web application frameworks use the Model-View-Controller (MVC) pattern. This pattern was first...
👍5
Phpstan-dba
Находит несоответствия между вашей доменной моделью и схемой в базе.
https://github.com/staabm/phpstan-dba
https://staabm.github.io/archive.html#phpstan-dba
👉 @php_lib
Находит несоответствия между вашей доменной моделью и схемой в базе.
https://github.com/staabm/phpstan-dba
https://staabm.github.io/archive.html#phpstan-dba
👉 @php_lib
GitHub
GitHub - staabm/phpstan-dba: PHPStan based SQL static analysis and type inference for the database access layer
PHPStan based SQL static analysis and type inference for the database access layer - staabm/phpstan-dba
🔥1
Не нужно стыдиться PHP
Недавно я решил зайти на сайт cybersport. ru (проект VK GROUP), где хотел посмотреть результаты матчей наших мальчиков по Dote. Мой взгляд упал на статью "Когда будет новый сайт". Там помимо общей информации было пару фраз про PHP и Symfony, которые меня расстроили.
👉 @php_lib
Недавно я решил зайти на сайт cybersport. ru (проект VK GROUP), где хотел посмотреть результаты матчей наших мальчиков по Dote. Мой взгляд упал на статью "Когда будет новый сайт". Там помимо общей информации было пару фраз про PHP и Symfony, которые меня расстроили.
👉 @php_lib
👍10❤3