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

Статьи

API сервер лог в Laravel

перевод api

Работая с API иногда имеет смысал делать лог запросов, которы приходят на сервер, и ответов, которы сервер отправляет. Я уже написал статью о том, как делать лог, когда работаешь с API клиентом. Ее можно посмотреть здесь. Сейчас давайте рассмотрим как делать лог, когда программируешь API сервис. Например, если система третьей стороны присылате нам уведомления, что заказ отпавлен, неплохо было бы сделать лог запросов которые эта система присылает и ответов, которые высылает наша система. Такой лог поможет разрешить спорные ситуации или найти ошибки в работе системы. Итак, начнем.

В routes/api.php файле Laravel создадим седующий маршрут:

Route::middleware('request.logging')->post('/hello', function() {
    return…

Как начать работать с очередями в Laravel

queue Laravel 6

Введение

Очереди (queues) это одна из сильных сторон фреймворка. Хотя они реализованы так, чтобы любой ремесленник смог их осилить, всё же некоторый порог для входа есть и моя цель помочь вам его преодолеть.

Закончив читать эту статью вы научитесь:

  • Использовать очереди для того чтобы быстро выполнять http-запросы.

  • Запускать обработку очереди с минимальными (нулевыми) дополнительными требованиями к серверу.

  • Обеспечить постоянную работу очереди.

Здесь будет рассмотрен только самый минималистический вариант организации очередей: через драйвер database. Будем считать, что это local или staging окружение, на котором не ожидается больших нагрузок. Хотя, если честно, большинство "рабочих" окружений также нельзя назвать highload :)…

Slavik

Автор молодец в любом случае. Хотя бы понятно написал зачем это нужно. Думаю тем кто не в теме будет очень полезно

Download url with self-signed HTTPS

В документации по Laravel тут и его английском варианте весьма неявно указано, как производить загрузку внешних файлов.

Цитирую оригинал

The put method may be used to store raw file contents on a disk. You may also pass a PHP resource to the PHPput method, which will use Flysystem's underlying stream support. Using streams is greatly recommended when dealing with large files:

Laravel и ULID

В прошлой статье мы разобрались как в Laravel работать с UUID. Но он не решает всех проблем распределенных систем. Один из новых подходов к генерации уникальных идентификаторов это ULID — Universally Unique Lexicographically Sortable Identifier (универсальный уникальный лексографически сортируемый идентификатор).

Сравнение UUID и ULID

Во многих случаях использование UUID неоптимально:

  • Это не самый эффективный способ кодирования 128-битной случайности
  • UUID v1/v2 непрактичен во многих средах, так как требует доступа к уникальному стабильному MAC-адресу
  • UUID v3/v5 требует уникального начального числа и генерирует случайно распределенные идентификаторы, которые могут вызвать фрагментацию во многих структурах данных
  • UUID v4 не предоставляет никакой другой информации…

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)…
artoodetoo

ИМХО, совершенно недопустимо изменять данные в Представлении. У кого-то может возникнуть такой соблазн, типа, для "оптимизации". Счётчик какой-нибудь посчитать и сохранить. Но не надо так делать! Потому что это портит логику и усложняет сопровождение.

Что же до "обращения к базе" в смысле операций чтения, в идеале да, они должны все происходить до обращения к Представлению. Но мы же сами добиваемся абстракции, когда чтение свойства объекта может неявно сопровождаться каким-то действием. Представление понятия не имеет делали мы eager loading или нет. Оно просто использует объект. Короче, врядли удастся избежать select в 100% случаев. По причине именно "объектности", "принципа чёрного ящика". Мы не всегда знаем как что-то работает внутри. Мы знаем только внешний эффект.

Недавно автор статьи Povilas опубликовал свой приём по внедрению данных в шаблон: через инъекцию сервиса (@inject), который рендерит свою вьюху и возвращает её как текст для вставки. Внутри такого сервиса очевидно будут операции с базой и как по мне это не очень страшно, если они не изменяют состояние.

Calculations in Blade, without violating MVC? Use Service Injection

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

Lumen Установка

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

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

Установка Open Server

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

Fauther

Если честно, очень мало статьей по настройки на том же докере, своем виртуальном сервере.
В боевых практиках это больше пригодится, чем «опен-сервер».

Знакомимся с 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>

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

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

dax

так будет Явно работать :)

set $root_path /var/www/qwe/data/www/qwe.com/public; #laravel
    location / {
        try_files $uri $uri/ /index.php?$query_string; #laravel
        location ~ [^/]\.ph(p\d*|tml)$ {
            try_files /does_not_exists @php;
        }
    }
    location @php {
        fastcgi_index index.php;
        fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f webmaster@iva3.kelme.md";
        fastcgi_pass unix:/var/www/php-fpm/qwe.sock;
        fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
        try_files $uri =404;
        include fastcgi_params;
    }
    root $root_path;

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

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

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

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

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

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

seqond
PHP
public function isAuthor(User $user)
{
        return 
$this->users->contains($user);
}

Так еще проще.

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

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

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

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

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

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

PHP
class 
seqond

Зачем использовать множественные get / post маршруты для profile если можно использовать 1 запись resource?

Route::resource('profile', 'UserController')

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