LINUX.ORG.RU

11
Всего сообщений: 73

Стилизация консольных приложений на базе Symfony, Laravel, Yii и других фреймворков c помощью Termage

Доброго Времени Суток!
Разрешите представить один свой небольшой опенсурс проект для консольных приложений - Termage (Terminal Mage)

Предыстория

В августе я начал работать над задачей, которая была на мне - это сделать CLI APP для функционала моей CMSки (https://github.com/flextype/flextype/issues/543).

Для реализации консольного приложения взял Symfony Сonsole. Функционал Symfony Сonsole показался мне крайне бедным и неудобным для стилизации и форматирования вывода.

Ранее я уже засматривался на проект от лиги выдающихся джентельменов - CLImate (https://climate.thephpleague.com) он богаче Symfony Сonsole по функционалу стилизации и форматированию, но по умолчанию не совместим с Symfony Сonsole, да и проект CLImate честно говоря давно уже не развивается и просто стоит на месте.

Принял решение сделать свою библиотеку, которая была бы совместима с Symfony Сonsole приложениями. Назвал свою библиотку CLIrad - но немного позже перименовал CLIrad в Termage (Terminal Mage).

Цель проекта Termage - это предоставить богатый и удобный функционал для стилизации и форматирования вывода любого, текста, html, markdown или логов в консольных приложениях любого фреймворка.

Вдохновители проекта Termage:

Подобных библиотек и с таким богатым функционалом для PHP нет! Termage будет PHP аналогом таких библиотек как Rich (PYTHON), SpectreConsole (.NET), PTerm(GO).

Termage ceгодня:

  • независимый от PHP фреймворка рендеринг.
  • 230+ страниц документации, которую я постоянно улучшаю.
  • 12 базовых элементов (Div, Span, Anchor, Alert, Chart, Paragraph и др)
  • 10 базовых стилей (Italic, Bold, Underline, Strikethrough и др)
  • fluent api, магические методы и pipeline классы.
  • шорткоды.

Репозиторий: https://github.com/termage/termage
Документация: https://digital.flextype.org/termage

Планы на ближайшее будущее:

  • улучшать документацию
  • улучшать покрытие тестов.
  • написать конвертор/парсер HTML в ANSI
  • написать конвертор/парсер MARKDOWN в ANSI
  • написать парсер логов
  • добавить новые элементы

 , , , ,

Awilum ()

Подскажите бесплатный хостинг LAMP с поддержкой 3-х фреймворков:

Подскажите бесплатный хостинг LAMP с поддержкой 3-х популярных фреймворков:

  • Symfony 5 >=
  • Yii2
  • Laravel 8 >=

PHP 7 >=

Нужен именно бесплатный хостинг!

 , , , ,

pup_kin ()

Мониторинг в квадрате

Есть сервис, который должен работать 24/7.

Сервис и вся логика написаны на php, сути это не меняет.

Сервис запускает задачи из питоновской приблуды supervisord

У супервайзера в конфиге есть 2 параметра, чтобы перезапускать упавший процесс

autorestart=true

startretries=9999

Которые задают перезапуск и количество попыток перезапустить процесс соответственно.

Хочется странного:нельзя ли мониторить сам супервайзер и перезапускать его вместе с процессом, который он мониторит чем-то другим.

Причина этого в том, что просто сильно костыльно выглядит выражение startretries=100500 .

 , , ,

Twissel ()

Редактор для PHP, Laravel и прочего вместо PhpStorm

Начну с предисловия. Пару дней назад ночью мне снился PHP. Это было как минимум странно, как максимум вообще дичь, но тем не менее я просыпался ночью с мыслью “PHP!”,а засыпал с мыслью «Laravel!” или «Simphony!”, причём испытывал при этом какое-то неадекватное умиление и счастье. Это все при том, что на пыхе я писал последний раз лет пять назад, и то неглубоко.

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

Так как я привык к ИДЕЕ в плане использования, то в голову сразу приходит PhpStorm, но покупать его я не хочу, а триальной версии на месяц мало, потому что ковыряние может растянуться гораздо дольше. Да, можно спиратить, но это как-то не Ъ, да и нет на трекерах его ни под пингвина, ни под мак, не писать же в винде (да и нет ее).

Отсюда вопрос - что из нетбинса и эклипса лучше поддерживает пхп и прочие ларавели?

Когда последний раз году в 2015 гонял эклипс , он мне показался каким-то… топорным что ли. Вроде как все есть, но оно неочевидно и как-то вразнобой. Насчёт нетбинса не помню, если честно.

Опережу сразу же первых комментаторов - Вим и емакс не хочу и не буду :)

 ,

Zhbert ()

Проработка скриптов и API для проекта на Laravel

127к суммарный бюджет проекта. Необходимо реализовать выбранный скрипт:

  1. Обмен данными между своими сайтами по Крон (бюджет 15к)

  2. Публикация статей в 6 соцсетях по Крон (бюджет 30к)

  3. Скрипт импорта статей в БД из структурированных таблиц Эксель (бюджет 5к)

  4. Парсинг статей в БД с 5 новостных ресурсов по Крон (бюджет 10к)

  5. Автоперевод статьи (Промт, Гугл, Яндекс) - API переводчиков (бюджет 15к)

  6. Оптимизация картинок (кадрирование под соцсети, под статьи, уникализация, сжатие) (бюджет 10к)

  7. Проработка СЕО статьи (форматирование текста, мета-теги статьи и картинки, КС) (бюджет 5к)

  8. Нормализация статьи (уникальность, вода, спам, орфография) - API ТекстРу (бюджет 5к)

  9. Проверка индексации страниц проекта поисковиками, переобход по Крон - API Google и Яндекс (бюджет 15к)

  10. Проверка оптимизации страниц сервисом ГуглПейджСпид по Крон - API Google (бюджет 10к)

  11. Разработка модуля-виджета обратной связи под Ларавель (бюджет 7к)

Страницы админки делаем на VUE. За основу берем готовую сборку Laravel Starter Kit (https://github.com/nasirkhan/laravel-starter). Подробное ТЗ по выбранному скрипту - в личке. Пример оформления страниц в админке (красные рамки - границы блоков): https://prnt.sc/10zpki5

 , ,

AlexeyKHV ()

Как правильно запустить очередь в Laravel с именованными очередями?

Восстанавливаю сейчас к работе проект двухлетней давности.

В нем используется Laravel 5.5.45.

Сам забыл уже и PHP, и Laravel, и что там где там надо крутить.

Проблема вот в чем. Очереди в проекте настроены на драйвер database, используется MySQL (MariaDB). Таблицы jobs и failed_jobs созданы. Задания очереди успешно создаются, и появляются в таблице jobs. Для заданий предусмотрено 3 очереди:

- email
- phone
- telegram

В таблице jobs в поле queue видно соответствующее имя очереди.

Если согласно документации запустить очередь командой:

php artisan queue:work

то задания выполняться не будут, и поле attempt (количество попыток запуска) для всех заданий будет содержать значение 0.

В какой-то момент я нащупал, что если запустить команду:
php artisan queue:work --queue=telegram,default

то задания из очереди telegram таки выполнятся.

Но в документации я не нашел описания того, что для работы обработчика очереди требуется обязательно указывать имя очереди. Вроде как команда php artisan queue:work должна обрабатывать все очереди, но этого не происходит.

Вопрос: а какой командой таки можно запустить обработку всех именованных очередей? Я ее пропишу в Supervisor.

 , ,

Xintrea ()

PHP - аннотация ориентированный язык?

Привет! На днях начал штудировать php вместе взятыми его symfony/laravel фреймворками. Но задаюсь вопросом? Почему так много аннотаций? Если честно мне начинает всё это раздражать. Такое ощущение я не код пишу, а только аннотации/комментарии. Я конечно понимаю, что всё это преобразуется в код. Но зачем? Почти вся логика контролеров пишется в аннотациях. Что за шляпа вообще? Мимо вкатыш из питона.

 , ,

superteremok ()

наркомания это норма?

Копаюсь тут в сырцах одного сервиса на laravel… вообщем есть там такой кейс (мне интересно что двигало автором):

  1. мобильное приложение по oauth2 передаёт в backend телефон - в ответ получает ключ «hash» на самом деле шифрованный телефон

  2. backend отправляет на телефон sms с pincode

  3. мобильное приложение по oauth2 передаёт в backend полученный ранее «hash» и pincode - backend регистрирует пользователя с этим телефоном если его еще нет и отдает access и refresh токены

РЕГИСТРАЦИЯ В oauth2 ЭТО НЕ СТАНДАРТ!!! (в данном случае используется левый grant_type)

Собственно вопросы которые меня мучают может быть вы подскажете:

  1. откуда желание вкрутить регистрацию в oauth2? это личные наркотические пристрастия автора или оно так принято в среде laravel/php?

  2. на кой черт этот кейс с «hash» вместо просто передачи телефона и pincode на третьем шаге? это личные наркотические пристрастия автора или оно так принято в среде laravel/php?

 , ,

quester ()

Ищу работу удалённо: PHP/Laravel/PostgreSQL/MySQL/Vue/Angular/Bootstrap

Ищу работу удалённо. Оказываю следующие услуги:

  • Разработка веб приложений PHP/Laravel/PostgreSQL/MySQL/Vue/Angular/Bootstrap и т.д.

  • Написание скриптов для синхронизации DB из веб или API (пример: синхронизировать базу данных продуктов в Prestashop с продуктами из DelCampe API или вытащить все сообщения темы на форуме в БД)

  • Писал telegram боты

  • Созданный мной агрегатор CSV конфигурируемый через web UI с быстрым поиском в PostgreSQL, с подробным описанием и скриншотами: https://webtechsolutions.ml/portfolio/csv-feeds/

  • Опыт разработки Android приложения

  • Помогу настроить linux сервер по ssh

  • Прочие подобные услуги

  • Могу перевести текст технической направленности с английского

  • Могу оказать образовательные услуги в указанных выше областях

Контакты:

XMPP/Jabber: wtj12@jabber.ru

Email: тоже самое только домен mail.ru

Или просто сообщение на форуме.

С учётом пожеланий @mord0d:

  • почасовая оплата от 300 рублей в час, для мелких подработок можете просто пополнить счёт телефона (на сайте мегафона по карте не выходя из дома или через терминал)

  • оплата за конкретный проект после расммотрения ТЗ

  • если хотите предложить постоянную работу тогда от 20,000 рублей в неделю (70 часов работы)

 , , , ,

wtj12 ()

Компоненты Laravel 7 & page title

В blade Laravel 7 презентован новый синтаксис компонентов, когда внутри view стало возможным писать что-то вроде

<x-mycomponent param1="value" param2="value"/>

Всё круто, но возникает вопрос, на который нигде не могу найти ответ. А можно ли как-то изнутри компонента задать значение переменной в родительском view (в котором прописан тег компонента)? Ну то есть это то, что возможно делать с помощью @yield и @extends.

Поясню. Пусть, например, есть файл layout.blade.php:

<html>
<head>
   <title>@yield('title')</title>
</head>
<body>
    <x-mycomponent param1="value" param2="value"/>
</body>
</html>

И, собственно, шаблон подключаемого компонента:

@section('title', 'Заголовок страницы');

<div>
А здесь какой-то контент компонента
</div>

Я ожидаю, что title будет установлен компонентом, как если бы он наследовал layout через @extends. Но этого не происходит. Как-то можно сделать это с использованием нового синтаксиса компонентов Laravel 7? А то если нет, то это весьма существенное ограничение его использования.

 ,

Novascriptum ()

ORM internals:View from within

В очередной раз хочу заняться изучением Laravel.

Вопрос по сабжу, накидайте примеров простеньких ORM c GitHub, чтобы можно было понять, как это устроено изнутри.

Во внутрянку Eloquent ORM пока лезть не хочу, т.к. боюсь запутаться.

Хотя вот — https://pic4a.ru/02/6tz.jpg ,может бояться не нужно)

 , , ,

Twissel ()

Что быстрее laravel или django?

 , , ,

Deleted ()

нубский вопрос про выбор веб-платформы

Господа коллеги, день добрый!

Я тут выбираю между Laravel и Zend Framework 2.

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

В отличае от ZF, который довольно раскручен, и видно, что у него большая перспектива.

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

 , , ,

Infra_HDC ()

Как добавить стандартный JQuery Datepicker в Laravel 5.5?

Пытаюсь добавить стандартный JQuery Datepicker в Laravel 5.5.

Делаю все действия вот по этой статье:

https://medium.com/@Oriechinedu/how-to-add-jquery-ui-plugin-to-a-laravel-app-...

Сбрасываю все кеши, не забываю про npm run dev.

В коде пишу:

<input type="text" class="datepicker" id="dateFrom" name="dateFrom" />
<input type="text" class="datepicker" id="dateTo" name="dateTo" />


В результате при клике на даты ничего не происходит.

Проверяю сгенерированный /public/js/app.js, в нем вижу, что вставлен компонент datepicker, и вижу что строка
$('.datepicker').datepicker();

превратилась в
jquery__WEBPACK_IMPORTED_MODULE_0___default()('.datepicker').datepicker();


То есть, вроде как класс должен обрабатываться и обработчик должен прилепляться. Но этого не происходит. Где что еще нужно крутануть?

 , ,

Xintrea ()

Как в Laravel при логине пользователя перейти на фиксированную страницу?

Имею Laravel 5.5, стандартную систему логина пользователей.

И имеется такая проблема. При логине пользователя мне нужно, чтобы открывалась вполне конкретная страница. В моем случае это

/personalArea

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

А мне нужно, чтобы всегда при логине открывалась страница /personalArea.

Сейчас настройки следующие.

1. В файле app/Http/Controllers/Auth/LoginController.php прописано свойство:
    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = '/personalArea';


2. В файле app/Http/Middleware/RedirectIfAuthenticated.php содержится следующий код:
    public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->check()) {
            return redirect('/personalArea');
        }

        return $next($request);
    }


Что где еще надо крутить, чтобы перенаправление при логине всегда срабатывало на нужный мне адрес?

 , , , ,

Xintrea ()

Тестирование в Laravel. Как задать переменную сессии в POST-запросе?

Что-то я затупил. Решил поразбираться как делать Feature-тестирование в Laravel и застрял. У меня Laravel 5.5, и тестовое окружение:

use Illuminate\Foundation\Testing\TestCase;


В общем, в одном из тестов мне надо сделать POST-запрос с предварительно установленным значением сессионной переменной. В документации я вижу следующее:

https://laravel.com/docs/5.5/http-tests#session-and-authentication
class ExampleTest extends TestCase
{
    public function testApplication()
    {
        $response = $this->withSession(['foo' => 'bar'])
                         ->get('/');
    }
}

То есть, сделать GET-запрос с предварительной установкой сессионной переменной возможно. Но если вместо метода get() я пишу post(), то получаю ошибку:
Error: Call to undefined method Tests\Feature\PublicIntercomPagesTest::push()


И я понять не могу, почему нельзя устанавливать сессионную переменную при POST-запросе.

Видимо, я что-то забыл про функционирование протокола HTTP. Но никаких объяснений в интернете я найти не могу.

 , , , ,

Xintrea ()

Какой стек лучший Python(Django) или PHP(Laravel)?

Какой стек лучший Python(Django) или PHP(Laravel)? Я хочу услышать мнение людей? Плюсы и недостатки у обоих? Возможно даже если не Larevel или Django, есть ещё Flask, Yii и т.д. Как то я пытался изучить Django после питона, но у них документация показалось для меня очень большой все сразу не прочитаешь и не поймешь. Как к людям начинают осенить Django, после каких действий они начинают комфортно писать код на джанге? PHP тоже пытался учить после питона, но мне некоторые вещи показались не очень логичными в плане синтаксиса. Меня учили в книгах питона вот так..., а в php все наоборот... И начинается обдумывание и головные мозгодробительство. Почему так сделано, я же читал в питоне нужно так делать, а почему в PHP все наоброт, и т.п. такие вопросы. Возможно я что-то пропускаю в PHP. Но я не обсираю этот язык. Ни в коим случае! Я просто хочу стать веб разработчиком и любить свою работу. Пока что я знаю HTML, CSS и малеха Python. А! Ещё забыл, статические генераторы сайтов, такие как Hugo. Но в этих стат.генераторах писать код очень топорно и ограничено. Фиг чё толкового напишешь.

 , , , ,

Deleted ()

Где прячется задача для Laravel-очереди?

Что-то странное у меня творится.

У меня есть задача для Laravel-очереди, написанная в виде PHP-класса, как положенно. Внутри этой задачи вызывается Shell-скрипт. Задачи хранятся в MariaDB.

И по логам я вижу, что этот Shell-скрипт все время запускается, причем с определенными параметрами.

Его никто кроме Laravel-очереди запускать не может. Но я смотрю в таблицу jobs и в таблицу failed_jobs - там пусто, ни одной записи. И я не могу понять, почему эта задача отправляется на выполнение. Я уничтожаю процесс этого скрипта, но он снова появляется. Его однозначно запускает Laravel-очередь.

В файле /etc/supervisor/conf.d/laravel-worker.conf у меня прописана команда:

command=php /var/www/mysite/artisan queue:work --sleep=3 --tries=3

То есть, бесконечно задача запускаться не должна (максимум 3 раза). Но она реально запускается бесконечно.

Я не пойму, где эта задача хранится? Почему она перезапускается бесконечно? Ее перезапускает сам supervisor, или тупит artisan queue:work, все время генеря новую задачу при старте через supervisor? Где это можно посмотреть?


UPD1: Сейчас проделал такой экспериент. Сначала остановил supervisor:
supervisorctl stop laravel-worker:*

Затем удалил процесс проблемного скрипта, и запустил вручную команду обработки очереди:
command=php /var/www/mysite/artisan queue:work --sleep=3 --tries=3

В результате проблемный скрипт НЕ запустился.

Получается, что его бесконечно запускал именно supervisor. Но в supervisor ведь прописана только команда «php /var/www/mysite/artisan queue:work --sleep=3 --tries=3», то есть скрипт не может запуститься сам, ему нужно чтобы сработало задание очереди!

Вот и непонятно, почему при ручном поллинге очереди скрипт не выполняется, а supervisor его каким-то волшебным образом все время ухитряется запускать?


UPD2: В логе /var/log/supervisor/supervisord.log за период, когда бесконечно запускался проблемный скрипт, нет ничего, ни одной записи.

 , , ,

Xintrea ()

Кнопка типа <button> - не хочет переходить по ссылке

Имею страницу с URL:

http://site.loc/personalArea/userHoldObjects/objectCard/show/18

В ее HTML-коде есть кнопка:

<form method="POST" action="#" ... >

<button 
 id="connectRoomToEnraceToBuildingButton" 
 name="connectRoomToEnraceToBuildingButton" 
 class="btn bth-default" 
 onclick="window.location='http://site.loc/personalArea/userHoldObjects/connectRoomToEnraceToBuilding/18'">
 
 <span class="glyphicon glyphicon-th"></span> Подключить

</button>

Когда я ее нажимаю, следует переход на URL:

http://site.loc/personalArea/userHoldObjects/objectCard/show/18#

Вместо того чтобы перейти на URL:

http://site.loc/personalArea/userHoldObjects/connectRoomToEnraceToBuilding/18

Почему так происходит? Кнопка не имеет тип submit, это просто кнопка. Я даже проверил в консоли выполнение кода:
window.location='http://site.loc/personalArea/userHoldObjects/connectRoomToEnraceToBuilding/18'

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

 , ,

Xintrea ()

Странные вещи в MySQL - стали обнуляться поля created_at и updated_at в Laravel 5.5

Наблюдаю сейчас неожиданную вещь. В базе данных в разных таблицах некоторые записи получают значения NULL в полях created_at и updated_at. Закономерность понять пока не смог.

Чаще всего обнулены оба поля:

http://i.piccy.info/i9/ad763b5e450b658e4547b5414b156191/1557687406/114867/131...

Но бывает, что только одно:

http://i.piccy.info/i9/4d87d0c404978c4d7fd0918491ddf9df/1557687435/30642/1314...

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

Schema::create('my_table', function (Blueprint $table) {
  $table->increments('id');
  $table->timestamps();
...


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

Это происходит на двух хостах - и на машине разработчика, и на тестовом сервере. Базы данных, естественно, разные.

В чем может быть проблема?

 , , , ,

Xintrea ()