Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Laravel 6/7/8 » Парсинг сайтов » 23.07.2021 07:35:04

Vladimir_user
Ответов: 1

Добрый день.
Пытаюсь написать парсер, который берет данные со стороннего сайта.

Вот мой код:

    public function index()
   {
       $context = stream_context_create(
            array(
                "http" => array(
                    "max_redirects" => 101,
                    "header" => "User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36"
                )
            )
        );

        $link = '[url]https://url.com[/url]';
        // Get html remote text.
        $html = file_get_contents($link, false, $context);
       dd($html);
   }

Код рабочий. Но на одном из сайтов постоянно выдаёт ошибку (в примере, в целях безопасности, указан не реальный url):

ErrorException (E_WARNING)
file_get_contents(https://url.com): failed to open stream: Redirection limit reached, aborting

Также пробовал  вариант с follow_location

    public function index()
   {
       $context = stream_context_create(
            array(
                "http" => array(
                    "max_redirects" => 101,
                    "header" => "User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36",
                    'follow_location' => false
                )
            )
        );

        $link = '[url]https://url.com[/url]';
        // Get html remote text.
        $html = file_get_contents($link, false, $context);
       dd($html);
   }

Выдаёт следующее сообщение:

"""

<HTML><HEAD><TITLE>Loading</TITLE></HEAD><BODY bgcolor="#ffffff"><H3 style="color: #ffffff">Loading</H3></BODY></HTML>
"""

Через браузер страница открывается. Пробовал запускать как локально, так и с сервера. Результат один и тот же.
Подозреваю, что стоит какая-то защита на сайте, т.к. другие сайты парсятся нормально.
Вся надежда на вас, подскажите как решить данную проблему. Заранее спасибо.

#2 Re: Laravel 6/7/8 » Как получить ошибки валидации в JSON » 23.07.2021 07:18:17

Добрый день.
Попробуйте так

    axios.post(`/generatesms`, {phone: phone})
        .then(response => {

          if (response.data.success == 'true') {

            document.querySelector('#enterPhone').innerHTML = phone;
            navigationEnterMenu(target); //успех
            next_sms_time = response.data.data.timer;
            enterTimer();

          } else {

            document.querySelector('#madalEnterPhone').classList.remove('js-modal-enter-content-open');
            document.querySelector('.modal-enter-form-phone-text').innerHTML = phone + '<br>Не зарегистрирован!';
            document.querySelector('#errorEnter').classList.add('js-modal-enter-content-open');

          }

        }).catch(error => {

          error.response.data.errors;
          console.log(error.response.data.errors)
        });

#4 Laravel 6/7/8 » Установка Laravel 8 на centos-webpanel » 10.11.2020 18:35:32

Vladimir_user
Ответов: 2

Версия: Laravel 8
ОС: Centos 7 (админ панель http://centos-webpanel.com/)
PHP Version 7.4.11

Установил рабочий проект Laravel со стандартными  настройками Apache. Когда запускаю метод POST, PUT или DELETE, то выдает ошибку 403. На локальном сервере всё работает.
Подскажите, пож-та, какие есть идеи?

#5 Re: Laravel 6/7/8 » Laravel 6.x против 7.x? » 10.11.2020 18:25:29

Добрый вечер.
Хорошая практика обновлять версии laravel спустя 1-2 месяца после релиза. Сейчас уже смело можно будет переходить на 8-ку. Лучше сильно не затягивать, т.к. перепрыгивать через версии проблематичней, чем если переходить постепенно.
Кроме новых плюшек новая версия обновляет мин версию php, что существенно увеличивает скорость работы.

#6 Laravel 6/7/8 » PayPal для Laravel 8 » 30.10.2020 17:38:07

Vladimir_user
Ответов: 1

Доброго времени суток.
Сейчас разрабатываю api для получения платежей с помощью PayPal.
В гугле много вариантов, но половина либо устаревшая либо не работает на Laravel 8.
Подскажите, пож-та, те кто сталкивался с такой задачей на новых версиях, проверенный пакет для установки на Laravel 8.
Заранее спасибо.

#7 Re: Laravel 6/7/8 » Laravel + pusher не работает на рабочем сервере » 16.09.2020 16:33:01

Вопрос закрыт.
Я заменил  ShouldBroadcast на ShouldBroadcastNow в событии

<?php

namespace App\Events;

use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcastNow;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;

class Notifications implements ShouldBroadcastNow
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    /**
     * Create a new event instance.
     *
     * @return void
     */
    public $data;

    public function __construct($data)
    {
        $this->data = $data;
    }

    public function broadcastOn()
    {
        return ['mi-sbs-notification'];
    }

    public function broadcastAs()
    {
        return 'event-pusher';
    }
}

После этого всё заработало

#8 Re: Laravel 6/7/8 » Laravel + pusher не работает на рабочем сервере » 16.09.2020 11:43:37

Спасибо за ответ.

Я бы дважды проверил .env на продакшене

Я уже 3-ё суток его перепроверяю)))
Пробовал разные комбинации.
Также в файле app/config/broadcasting.php прописывал ключи вручную - не помогло.

Запускал на локалке и сервере команды

$ php artisan tinker
config('broadcasting');

Результаты идентичны

Также заметил особенность. Если на локалке в файле .env указать не верный ключ, то при вызове события выдаёт исключение

Illuminate\Broadcasting\BroadcastException: Pusher error: 400. in file D:\xammp\htdocs\step-by-step.loc\vendor\laravel\framework\src\Illuminate\Broadcasting\Broadcasters\PusherBroadcaster.php on line 121

Если тоже самое сделать на продакшене, то ошибок не выдаёт. Такое ощущение, что на продакшене вообще игнорируется файл app/config/broadcasting.php и сразу все сообщения пишет в log файл.

Кроме того, сделал бы php artisan config:clear и php artisan cache:clear

Запускал и не раз))) Также чистил всё что только можно очистить с помощью команд

php artisan optimize&&php artisan cache:clear&&php artisan route:cache&&php artisan view:clear&&php artisan config:cache&&php artisan config:clear

Help me please!!!

#9 Re: Laravel 6/7/8 » Laravel + pusher не работает на рабочем сервере » 15.09.2020 20:09:57

Ещё заметил, что время указанное в логах на продакшене на 2 часа меньше, чем серверное. Даже пробовал менять время на сервере - время в логах всё равно на 2 часа меняется в меньшую сторону

#10 Laravel 6/7/8 » Laravel + pusher не работает на рабочем сервере » 14.09.2020 18:16:01

Vladimir_user
Ответов: 4

Версия Laravel - 8.1.0

Локальный сервер:
OC Windows
XAMMP 7.4.8
PHP 7.4.8

Рабочий сервер
ОС Linux Centos 7
PHP 7.4.8

Добрый вечер.
Настроил отправку push уведомлений по данной инструкции https://www.tutofox.com/laravel/laravel … ts-pusher/
.env

BROADCAST_DRIVER=pusher
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120

PUSHER_APP_ID=code
PUSHER_APP_KEY=code
PUSHER_APP_SECRET=code
PUSHER_APP_CLUSTER=eu

app/config/broadcasting.php

'default' => env('BROADCAST_DRIVER', 'null'),

        'pusher' => [
            'driver' => 'pusher',
            'key' => env('PUSHER_APP_KEY'),
            'secret' => env('PUSHER_APP_SECRET'),
            'app_id' => env('PUSHER_APP_ID'),
            'options' => [
                'cluster' => 'eu',
                'useTLS' => true
            ],
        ],

app/Events/Notifications.php

<?php

namespace App\Events;

use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;

class Notifications implements ShouldBroadcast
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    /**
     * Create a new event instance.
     *
     * @return void
     */
    public $data;

    public function __construct($data)
    {
        $this->data = $data;
    }

    public function broadcastOn()
    {
        return ['mi-sbs-notification'];
    }

    public function broadcastAs()
    {
        return 'event-pusher';
    }
}

Команда вызывающая событие

event(new Notifications($message));

На локальном сервере всё отрабатывает нормально, а вот на продакшене все сообщения записываются в лог файлы

[2020-09-14 14:53:58] local.INFO: Broadcasting [event-pusher] on channels [mi-sbs-notification] with payload:
{
    "data": {
     текст сообщения
    },
    "socket": null
} 

Google и Яндекс уже перерыл. Помогите, пож-та, разобраться

#12 Re: Laravel 6/7/8 » Авторизация пользователя с помощью SMS » 09.09.2020 13:18:08

Спасибо.
Больше интересует, процедура формирования и отправки SMS

#13 Laravel 6/7/8 » Авторизация пользователя с помощью SMS » 09.09.2020 09:34:54

Vladimir_user
Ответов: 4

Добрый день.
Версия Laravel: 8

Задача.
Необходимо сделать авторизацию пользователя через SMS

Суть проблемы.

При регистрации, пользователь заносит в БД свой номер телефона.

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

Подскажите, пож-та, как лучше всего сделать данный функционал. Заранее спасибо

#14 Laravel 6/7/8 » Перенос кода валидации из контроллера в файл Request » 23.06.2020 08:25:56

Vladimir_user
Ответов: 1

Всем привет.
Для валидации обычно использую файлы Request.
Но столкнулся со следующим видом валидации, который не знаю как описать в файле Request

$validator = Validator::make($request->all(), [
                'slug' => [
                    'required',
                    Rule::unique(Article::class)->ignore($id),
                ],
            ]);
            if ($validator->fails()) {
                return redirect()->back()
                    ->withErrors($validator)
                    ->withInput();
            }

Суть валидации следующая, проверить уникальность значения в БД, игнорируя запись с определенным id.

#15 Re: Laravel 6/7/8 » Laravel 7 сломался после composer update и composer dump-autoload » 23.06.2020 08:16:49

Та же история.
Уже приспособился, после каждого изменения маршрута запускаю

php artisan optimize

После этого всё работает

#16 Laravel 6/7/8 » Парсинг html » 05.06.2020 09:10:26

Vladimir_user
Ответов: 1

Добрый день.
Версия Laravel: 7.14.1

Задача.
Необходимо текст HTML из поля формы сохранить в БД в виде json строки.
Пример html:

<h2>Это заголовок</h2>
<p>Это первый параграф</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<blockquote>
<p>это цитата</p>
</blockquote>
<p>Это второй параграф</p>
<hr>
<p>Это третий параграф</p>
<p>&nbsp;</p>
<pre>
<code class="language-plaintext">
Какой-то ещё тег
</code>
</pre>
<p>&nbsp;</p>

Что должно получиться:

[
 {
   type:h2
   value:Это заголовок
 },

 {
   type:p
   value:Это первый параграф
 },

 {
   type:p
   value:&nbsp;
 },
 {
   type:p
   value:&nbsp;
 },
 {
   type:p
   value:&nbsp;
 },

 {
   type:blockquote
    {
      type:p
      value:это цитата;
    },
 },

 {
   type:p
   value:Это второй параграф;
 },

 {
   type:hr
 },

 {
   type:p
   value:Это третий параграф
 },

 {
   type:p
   value:&nbsp;
 },


 {
   type:pre
    {
      type:code
      value:Какой-то ещё тега;
    },
 },

 {
   type:pre
    {
      type:code
      value:Какой-то ещё тега;
    },
 },
 {
   type:p
   value:&nbsp;
 }

]

Структура html всегда разная. Структура json должна повторять структуру html.


Я вижу следующие этапы решения данной задачи:
1 HTML код преобразовать в PHP массив, где название тега - ключ, а содержимое - значение
2 Полученный массив преобразовать в json

Со 2-м пунктом проблем не должно возникнуть. Сейчас застопорился с 1-м пунктом.

Что было проделано:
Пересмотрел в гугле все возможный парсеры html, но все они заточены на поиске конкретного тега или атрибута. В данной задаче мне необходимо распарсить все теги и разместить их  в том порядке, в котором они расположены в HTML.

Буду рад любым вариантам, неважно будь-то пакет laravel либо "ванильный" php.
Заранее спасибо.

#17 Laravel 6/7/8 » Не работает middleware » 21.04.2020 12:41:10

Vladimir_user
Ответов: 0

Laravel 7.6.2
PHP 7.3.4


Добрый день.
Пытаюсь настроить Laravel Passport у себя на проекте.
Для этого использую эту статью
https://medium.com/@martin.riedweg/lara … b909e12528

Сейчас споткнулся на этапе создания middleware, который добавляет в заголовок 'Accept' ='application/json'
http://prntscr.com/s37e0h

Создал middleware http://prntscr.com/s37fht
Добавил его в Kernel http://prntscr.com/s37g33

Пробовал добавить посредник в роуты http://prntscr.com/s37h2c
А также в контроллере http://prntscr.com/s37hzf, но посредник не отрабатывает.

Что это может быть, где я допустил ошибку?

#18 Re: Вакансии » Сколько стоит написать сайт? » 21.04.2020 12:19:38

Сколько стоит автомобиль? Ну такой, с 4-мя колесами, руль справа, 4 двери, зеленого цвета.
Ответ: от 0 до бесконечности. Чем больше подробностей, тем точнее сумма.)))

#20 Re: Laravel 6/7/8 » Валидация API » 15.04.2020 12:26:55

Лучше валидацию проводить в файлах Request.
Для этого:
1 вызываем команду

php artisan make:request NameRequest

После это в app\HTTP появится папка Request с файлом NameRequest
2. Для api, чтобы ответ ошибки возвращался в json формате, добавляем в данную папку файл ApiFormRequest.php

<?php

namespace App\Http\Requests;

use Illuminate\Contracts\Validation\Validator;
use Illuminate\Http\Exceptions\HttpResponseException;
use Illuminate\Http\JsonResponse;
use Illuminate\Validation\ValidationException;
use Illuminate\Foundation\Http\FormRequest;

abstract class ApiFormRequest extends FormRequest
{
    protected function failedValidation(Validator $validator)
    {
        // все ошибки валидации
        $errors = (new ValidationException($validator))->errors();

        throw new HttpResponseException(response()->json([
            'errors' => $errors
        ], JsonResponse::HTTP_UNPROCESSABLE_ENTITY));
    }

    abstract public function authorize();

    abstract public function rules();


}

3. В файле NameRequest меняем эти строки http://prntscr.com/rzoluk на эти http://prntscr.com/rzomjy
Здесь http://prntscr.com/rzon19 меняем на true. В блоке rules прописываем правила валидации http://prntscr.com/rzonwd . При необходимости, прописываем варианты ответов http://prntscr.com/rzopxt

4. Теперь в нужном контроллере вызывай данный реквест http://prntscr.com/rzorzp

5. Теперь на стороне клиента ты сможешь получить ошибку в json формате http://prntscr.com/rzouel, с которой сможешь сделать, что пожелаешь нужным

Вот вариант как получить сообщение об ошибке во Vue http://prntscr.com/rzow6q

#21 Re: Laravel 6/7/8 » Мутатор чисел » 15.04.2020 11:59:06

Спасибо за ответ.
Я знаю про этот метод в php, но как его поместить в мутатор, чтобы в json уже были корректные данные?

#22 Laravel 6/7/8 » Мутатор чисел » 15.04.2020 11:12:55

Vladimir_user
Ответов: 4

Laravel Framework 7.6.1
PHP 7.3.7

Добрый день.

Суть проблемы:
Необходимо форматировать разряды чисел из выборки БД.
Например, есть таблица

id -1 
summa- 200000

Мне необходимо получить данные в виде:

[
    {
        "id": 1,
        "summa": 200 000,

    },
]

То есть разделить десятки и тысячи пробелами. Данные получаю в json формате для api

Для решения, данной проблемы думаю использовать мутаторы в моделях.
Например,

protected $casts = [
 'summa' => какой-то код,
];

Следовательно вопрос, как это можно сделать с помощью мутаторов или другим способом?

#23 Re: Laravel 6/7/8 » Опыт использования laravelshift.com » 28.12.2019 13:55:28

Не совсем понятна идея. Можете подробней рассказать?

#24 Re: Laravel 6/7/8 » Не работает отношения hasMany » 23.12.2019 11:42:39

Разобрался.
Оказывается в выборку достаточно добавить поле, по которому идёт связка таблиц
http://prntscr.com/qel0t1

#25 Re: Laravel 6/7/8 » Не работает отношения hasMany » 23.12.2019 10:29:58

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

    /**
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
     */
    public function check_list_variables()
    {
        return $this->hasMany(CheckListVariable::class,'check_list_question_id','id');
    }

Результат тот же. Какие ещё могут быть варианты?

Подвал раздела