Может войдёшь?
Черновики Написать статью Профиль

Статьи

Eloquent и Blade: советы по повышению производительности

перевод Eloquent blade

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

Сценарий 1. Загрузка отношения belongsTo(): не забудьте про «жадную загрузку»

Типичный случай — вы перебираете записи через @foreach, и, в каком-то столбце, вам нужно показать родительскую запись с определенным полем.

@foreach ($sessions as $session)
<tr>
  <td>{{ $session->created_at }}</td>
  <td>{{ $session->user->name }}</td>
</tr>
@endforeach

И, конечно, Session принадлежит User, в app/Session.php :

public function user()
{
    return $this->belongsTo(User::class)…
OlegD

по всех примерах прохого кода одна проблема — получение данных прямо в представлении, т.е. вроде бы ты уже пытаешься писать на MVC, у тебя часть логики отдельно, но упущение основ, отсутствие практики и т.п., вынуждают писать такой код, тем самым увеличивая время генерации страницы и данных.

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

В итоге в шаблоне остаются только данные и логика отображения, циклы данных. И одна проблема: тип используемых данных.

Работая с моделями на выходе всегда стоит коллекция и объект(ы). Мы обращаемся через →. Но если по каким-то причинам мы изменим их на другой вид, например массив, или наоборот, то придется переделывать логику отображение данных, точнее ее работу.

Если ли разница в производительности при работе с коллекциями и объектами и и работе с массивами?

Конечно, преимущества работы будет в работе с объектами, т.к. мы может предопределить/переопределить их логику работы и это не отобразится на представлении. Кроме того, мы можем сократить кусок трудновоспринимаемого кода из представлений.

Создаем сайт на Lumen (Laravel) - Установка

Lumen Установка

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

У меня несколько сайтов и в очередной раз я решил обновить их. В качестве основы выбрал Lumen. Это PHP-микрофреймворк написанный на основе компонентов Laravel его автором. Он достаточно простой и шустрый, как раз то, что мне нужно.

Установка Open Server

Локальную версию сайта я запускаю на Open Server, использую версию 5.2.9…

Знакомимся с Laravel Orchid

laravel5 orchid

Для нашего любимого фреймворка существует с десяток различных админок и ещё больше генераторов, выбор может показаться настолько запутанным, что некоторые пишут исключительно свои решения. Я не работал со всеми и не могу утверждать, что какие то лучше/хуже, но могу рассказать об ORCHID и как с ней работать ~ за 10 минут.

Всегда начинайте с данных

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

Создадим новую модель "Проекты":

php artisan make:model Project -m

Используя флаг -m, будет создан…

Arams

в файле ProjectListScreen вместо

// use Orchid\Screen\Input;
// use Orchid\Screen\Layouts;
// use Orchid\Screen\Screen;

нужно использовать

use Orchid\Screen\Fields\Input;
use Orchid\Screen\Layouts;
use Orchid\Screen\Screen;

а в функции layout вместо

 InputField::make('project.name')
   ->type('text')
   ->title('Название проекта')

вот это

Input::make('project.name')
   ->type('text')
   ->title('Название проекта')

в рутах вместо

$this->screen('projects', ProjectListScreen::class)->name('platform.projects');

нужно использовать

$this->router->screen('projects', ProjectListScreen::class)->name('platform.projects');

Сайт на Laravel. Nginx + Apache

laravel request_uri nginx

Решил поделиться, т.к. настройка nginx зачастую съедает кучу нервов и времени, может кому-нибудь поможет.

Итак, ситуация: Есть сайт на laravel, разработанный, работающий. Но под управлением только apache, разработчики привычно копипастят в .htaccess сие

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !(/$|\.)
    RewriteRule (.*) %{REQUEST_URI}/ [R=301,L]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>

и всё тип-топ.

До тех пор пока не возникает задача…

nailfor

Мысль у меня возникает только одна «Дядя Вова, ты..?»
В смысле нафига? И доколе? php-fpm, не?

Выполняем тестовое задание (Мини блог) — Часть 4

laravel 5 Тестовое задание

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

3) Добавить возможность удалять статьи в мягком режиме
. При этом сделать возможность обновить систему со старой версии (из первого задания) на новую без полного сброса БД.
Для возможности удаление статей в мягком режиме из таблицы «articles» создадим миграцию :

  1. php artisan make:migration ChangeArticleSoftTable --table=articles

В созданной миграции в методе up() опишем softDeletes.

raketa

Спасибо, исправил

Выполняем тестовое задание (Мини блог) — Часть 3

laravel 5 Тестовое задание

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

— Расширить модель User, чтобы она имела поля, соответствующие форме index.html.
Создаем миграцию, в которой вносим изменения в таблицу «users» необходимые для расширения модели User:

  1. php artisan make:migration ChangeUserTable --table=users

В созданной миграции в методе up() опишем создаваемые поля:

PHP
class 

Выполняем тестовое задание (Мини блог) — Часть 2

laravel 5 Тестовое задание

Всем привет, кто читает мою статью.
Создадим проект, начальную базу для дальнейшей работы. Используемые программные средства:
• IDE — Sublime Text.
• Laragon Wamp 4.0.
• Git.
• Laravel 5.5.
• Bootstrap 4.

Используемые дополнительные библиотеки:
laravelcollective/html — v 5.4.
intervention/image — v 2.4.
stechstudio/laravel-php-cs-fixer — v 1.0.

raketa

Спасибо, поправил.

Выполняем тестовое задание (Мини блог) — Часть 1

Laravel 5.х Тестовое задание

Всем привет, кто читает мою статью.
Очень много можно философствовать с чего начать изучение Laravel. Без теории никуда, но и практика нужна. Начнем с малого. Разработаем маленький тестовый проект.
Путешествуя по просторам интернета, я наткнулся на «Тестовое задание по Laravel», спасибо worldofswift. Ссылка на Git.
Задание:
1) Дано:
· Модель User без кастомных полей.
· Модель Article с полем text.
· Относятся как многие ко многим.
· Написать свойство articles в первой модели, которое вернёт все статьи…

Локализация роутера под SEO

route seo

В этой статье я расскажу о том, как сделать копию сайта на втором языке по отдельному пути, используя существующий сайт, встроенную локализацию и маршруты.

Дано: после почти полной готовности проекта на Laravel, заказчик хочет, чтобы локализация была реализована не просто переключением языка и отображением нужной версии сайта в соответствии с тем, что указано в сессии. Нужно было реализовать два сайта: русская и английская версия — которые лежали бы по разным путям. Для SЕО-продвижения не должно быть двух разных страниц по одному URL. И индексироваться русская и английская версия сайта должны отдельно…

WarLight

Отличное дополнение) Хотя реализация чуть другая)

Жаль вовремя не нашлись нужные библиотеки.

Создание отчетов в Laravel

report

Доброе время суток, коллеги!

Сегодня я хотел рассказать о своем пакете для генерации отчетов.

Собственно, что означает слово "отчет"?

Возможно, в вашей системе есть административная панель и ей пользуются дотошные администраторы или менеджеры.

Часто они просят вас выгружать статистические данные, возможно в Excel или PDF, может в более извращенный формат файлов.

Для таких вещей многие пользуются этой библиотекой. (Кстати, недавно вышел новый мажорный релиз)

Но остаются такие проблемы как:

  • создание UI
  • оформление структуры
  • архитектура
  • и чтоб все свистело и крутилось
  • а само может?

Да, я решил создать некое решение, сбрасывая часть проблем в этом направлении…

bobanobi4

Статья хорошая, но вот есть такая невкусняшкак производительность данного чуда, когда к примеру хочешь слить ~100k записей, то после небольших игр с данными ложится PHP, так как память кончается, а если сливать данных на 250к, то PHP может попросить и 1,5-2Гб оперативки, что для сервера невкусно зачастую и он може зависнуть (было такое с моим)
P.S. выход использовать другой класс, он проще куда более чем и методов там немного и да (не поддерживает стилизацию ячеек), но зато его можно дописать и с большими объемами справлется очень прекрасно и не жрет оперативку за счет прямого генерирования в Exele-подобный XML
Вот собственно сам класс https://github.com/mk-j/PHP_XLSXWriter, успехов в Excel

← Назад | ДальшеДвижется на Habravel