• Как написать метод laravel?

    @kalsc12345
    Неизвестный человек.
    Задача из не простых конечно уж.
    Если готовые коды но неизвестно рабочие или нет.
    Юзаем библиотеку Laravel SwiftMailer
    И для телеги Laravel Telegram Bot API.

    Начинаем наш скрипт делать.

    // app/Models/Notification.php
    
    namespace App\Models;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Notification extends Model
    {
        const TYPE_EMAIL = 1;
        const TYPE_TELEGRAM = 2;
        const STATUS_WAIT = 0;
        const STATUS_SENT = 1;
        const STATUS_ERROR = 2;
    
        protected $fillable = ['to', 'type', 'template', 'class_provider', 'subject', 'content', 'status'];
    
        public function sendNotification()
        {
            // ...
        }
    }


    public function sendNotification()
    {
        switch ($this->type) {
            case self::TYPE_EMAIL:
                $this->sendEmailNotification();
                break;
    
            case self::TYPE_TELEGRAM:
                $this->sendTelegramNotification();
                break;
    
            default:
                throw new \Exception('Unknown notification type');
        }
    }


    public function sendEmailNotification()
    {
        // Получаем провайдера email из поля class_provider
        $provider = app($this->class_provider);
    
        // Получаем получателя и контент сообщения из модели уведомления
        $to = $this->to;
        $content = json_decode($this->content);
    
        // Создаем экземпляр класса MailMessage
        $message = new \Illuminate\Mail\Message();
    
        // Устанавливаем адрес отправителя и получателя
        $message->setFrom(config('mail.from.address'), config('mail.from.name'));
        $message->addTo($to);
    
        // Устанавливаем тему и контент сообщения
        $message->setSubject($this->subject);
        $message->setBody($content->message, 'text/html');
    
        // Отправляем сообщение
        try {
            $provider->send($message);
            $this->status = self::STATUS_SENT;
        } catch (\Exception $e) {
            $this->status = self::STATUS_ERROR;
        }
    
        $this->save();
    }


    public function sendTelegramNotification()
    {
        // Получаем получателя и контент сообщения из модели уведомления
        $to = $this->to;
        $content = json_decode($this->content);
    
        // Отправляем сообщение
        try {
            \Telegram::sendMessage([
                'chat_id' => $to,
                'text' => $content->message,
            ]);
            $this->status = self::STATUS_SENT;
        } catch (\Exception $e) {
            $this->status = self::STATUS_ERROR;
        }
    
        $this->save();


    Ну теперь почта.

    config/mail.php

    // config/mail.php
    
    return [
    
        'default' => env('MAIL_MAILER', 'smtp'),
    
        'mailers' => [
            'smtp' => [
                'transport' => 'smtp',
                'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
                'port' => env('MAIL_PORT', 587),
                'encryption' => env('MAIL_ENCRYPTION', 'tls'),
                'username' => env('MAIL_USERNAME'),
                'password' => env('MAIL_PASSWORD'),
                'timeout' => null,
                'auth_mode' => null,
            ],
        ],
    
        // ...
    
    ];


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

    $notification = Notification::find(1);
    $notification->sendNotification();
    Ответ написан
    3 комментария
  • Как подключиться к веб-интерфейсу роутера?

    Там может быть провайдерский свич, а dhcp стоит выше, или у вас статика прописана, а сети попилены. На ПК выставить получение ip автоматически, подключится на хвост от роутера, глянуть, что выдаёт - проверить интернет. Сделать arp -a, по mac узнать, вендора. Далее будет более понятно.
    Ответ написан
    Комментировать
  • Есть смысл изучить документацию по ларавел 5 на laravel.ru или логичнее стартовать сразу с документации ларавел 8 на laravel.com?

    @402d
    начинал с бейсика на УКНЦ в 1988
    https://laravel.ru/posts/720
    Вот это читали ?
    Имхо главное пункт 4 и 2

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

    Я это к тому, что Язык(PHP) - буквы, документация по методам Laravel - словарь.
    А нужны еще правильно строить предложения - рамки фреймворка .
    цитирование - сторонние библиотеки ( В реальности их доля может многократно перекрыть сам фреймворк)
    А вот тут нужная из них может оказаться легаси (устаревшей)
    Ответ написан
    1 комментарий
  • Есть смысл изучить документацию по ларавел 5 на laravel.ru или логичнее стартовать сразу с документации ларавел 8 на laravel.com?

    Sanes
    @Sanes
    Как вам удобней. Разница в версиях не критичная. Вроде есть русскоязычная для 6.х
    https://laravel.su/docs/6.x/installation
    Ответ написан
    Комментировать
  • Как из массива объектов удалить дублирующиеся объекты?

    @alexalexes
    Можно удалить id из элемента массива (точнее из копии элемента), оставшиеся свойства засериализовать, от сериализации найти md5 хэш - это и будет ориентир для уникальности элемента.
    $out_array = [];
    foreach($donates as $donate)
    {
       $donate_copy =  $donate; // копируем элемент массива
       unset( $donate_copy->id); // удаляем уникальное свойство из элемента
       $key = md5(serialize($donate_copy)); // получаем уникальный ключ по содержанию остальных свойств
       $out_array[$key] =  $donate; // добавляем исходный элемент в новый массив по уникальному ключу
    }
    Ответ написан
    2 комментария
  • Как из массива объектов удалить дублирующиеся объекты?

    @Stalinko
    PHP'шник и фрилансер до мозга костей
    Обновлённый ответ.

    1. Можешь все объекты преобразовать в массивы без поля ID. Далее просто использовать array_unique($collection, SORT_REGULAR);

    2. Можешь определить метод __toString() у класса DonateOperation. Как-нибудь так:

    public function __toString(): string
    {
        $attrs = (array)$this;
        unset($attrs['id']);
        return json_encode($attrs);
    }


    Тогда array_unique будет работать применительно к исходной коллекции объектов.

    3. Брут-форс в лоб. Самый долгий способ. С небольшой оптимизацией:

    $collection = [...]; //исходная коллекция объектов
    $found = []; //коллекция найденных массивов для быстрой проверки
    $unique = []; //результирующая коллекция
    
    foreach ($collection as $item) {
        //преобразуем объект в массив без поля "id"
        $array = (array)$item;
        unset($array['id']);
        
        //ищем полученный массив в массиве $found
        if (!in_array($array, $found)) {
            $found[] = $array;
            $unique[] = $item;
        }
    }
    Ответ написан
    2 комментария