These are chat archives for LaravelRUS/chat

12th
Apr 2018
Andrew Rusev
@anrus
Apr 12 2018 06:16

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

Собственно задача: нужно находить статьи о каком-то заданном продукте или какой-то фирме на сайтах разных СМИ, а также в блогах. Это нужно, чтобы компания заказчик могла отслеживать что пишут про ее продукты и где.

есть компании, которые предлагают подобную услугу. https://www.ashmanov.com/tech-i-services/kribrum/

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

Пожалуйста поделитесь опытом. Нужна помощь

Peregudov Roman
@BadSantos
Apr 12 2018 10:04

Всем привет.
Хочу в алиасах laravel задать не фасад, а обычный класс. Т.е. 'User' => App\Model\User::class. Теперь везде можно использовать new \User() и будет создаваться обьект App\Model\User.

Усложним задачу: есть composer-пакет, который ставит свой алиас 'User' => Package\Model\User, а затем приложение перебивает на 'User' => App\Model\User(extend Package\Model\User).

И все бы хорошо, теперь все приложение и composer-пакеты, которые юзают \User - работают с моделью приложения.

Но есть проблема! Если кто-то пытался грузить класс \User до переопределения алиаса в приложении(на приложенческую модель), то автолоудер ларавеля загрузит из алиасов Package\Model\User. И в дальнейшем если обращаться к классу \User, то уже неважно что лежит в алиасах ларавеля(перебитое значение на App\Model\User), всегда будет возвращаться Package\Model\User, ведь до laravel-автозагрузчика дело уже не доходит... Как быть?

Peregudov Roman
@BadSantos
Apr 12 2018 10:49
Если кодом, то упрощенно вот это:
 ```
    $aliases = [];

    spl_autoload_register(function ($class) use (&$aliases) {
        eval('class ' . $aliases[$class] . '{}');
        class_alias($aliases[$class], $class);
        return true;
    });

    $aliases['Xxx'] = 'Foo';
    $obj = new \Xxx();
    echo "Obj class is : " . get_class($obj) . "\n";

    dd(get_declared_classes());

    $aliases['Xxx'] = 'Bar';
    $obj2 = new \Xxx();
    echo "Obj2 class is : " . get_class($obj2) . "\n";
 ```
оба раза выдает что класс Foo
сорян dd(get_declared_classes()); - лишнее :)
т.е. задача раздекларировать класс, и заставить пых еще раз пойти через spl callback и найти новый класс
звучит как нереальная задача)
Andrey Kushnarev
@andku83
Apr 12 2018 10:52
не знаю можно ли так делать в ларавель, но в Yii можно в конфиге определить замену для использования определенного класса
Peregudov Roman
@BadSantos
Apr 12 2018 10:54
в ларавель тоже можно. но задача, потом в процессе сменить эту замену :) понятно что уже созданные обьекты останутся теми кем были
собственно тут в первом случае Xxx и подменяется на Foo, но вот дальше следующий обьект будет не Bar, а опять Foo, т.к. spl_autoload_register уже не вызывается