Задать вопрос
  • Так в чём преимущество паттерна репозиторий?

    @GoodBoy123
    По сути репозиторий это более высокий уровень абстракции. При использовании репозитория вы программируете к интерфейсу, а не к реализации. На примере Laravel. У вас есть MessagesRepository:

    interface MessagesRepository {
    
     // Выбрать все сообщение
     public function all();
    
     // Выбрать сообщение по id
     public function findById($id);
    
     //Записать  сообщение
     public function store($id, $userId);
    }


    В остальном коде вы обращаетесь именно к этому интерфейсу используя IOC контейнер:
    MessagesController.php
    protected $messages;
     public function __construct(MessagesRepository $messages){
            $this->messages = $messages;
     }
    
    public function index() {
     return view('messages.index')-with('messages', $this->messages->all());
    }


    После этого вы с помощью Laravel IOC контейнера связываете интерфейс с конкретной реализацией
    $this->app->bind(
                'App\Repositories\Messages\MessagesRepository',
                'App\Repositories\Messages\MysqlMessagesRepository'
            );


    И в MysqlMessagesRepository уже делаете реализацию применяя интерфейс
    class MysqlMessagesRepository implements MessagesRepository {
    
     // Выбрать все сообщение
     public function all() {
     MysqlGetAllMessages();
    }
    
    
     // Выбрать сообщение по id
     public function findById($id);
    
     //Записать  сообщение
     public function store($id, $userId);
    }


    Преимущество в том что код работает с интерфейсом, а не с реализацией, поэтому для того, чтобы поменять Mysql на redis нужно:
    создать реализацию MessagesRepository интерфейса
    class RedisMessagesRepository implements MessagesRepository {
    
     // Выбрать все сообщение
     public function all() {
     RedisGetAllMessages();
    }
    
    
     // Выбрать сообщение по id
     public function findById($id);
    
     //Записать  сообщение
     public function store($id, $userId);
    }


    Сказать IOC контейнеру, что нужно брать другую реализацию:
    $this->app->bind(
                'App\Repositories\Messages\MessagesRepository',
                'App\Repositories\Messages\RedisMessagesRepository'
            );


    И на этом все. Менять код в MessagesController не нужно, так как он работает с интерфейсом.
    Ответ написан
    1 комментарий
  • Как в Laravel 4 отлавливать ошибки?

    @romach3
    За вывод ошибок отвечает этот класс:
    laravel.com/docs/5.0/errors#handling-errors

    Идея такова: ошибки можно отловить как брошенное исключение (как вами, так и laravel). К примеру TokenMismatchException для не совпавшего токена:
    $e instanceof TokenMismatchException
    Либо по статусу:
    $e->getStatusCode();
    Так же, можно не заморачиваться, а просто создать шаблон для ошибки и сохранить в /resources/views/errors/код.blade.php (где код - 403, 404...). Laravel сначала ищет его и только если не находит вываливает стандартное сообщение.
    Ответ написан
    2 комментария
  • Как в Laravel 4 отлавливать ошибки?

    Тут всё просто: писать нужно в файлики и писать нужно код. Ничего нового пока не придумали. :)
    laravel.com/docs/5.0/errors#http-exceptions
    Ответ написан
    Комментировать
  • Как автоматический записывать поисковый запрос в БД (Laravel)?

    @miki131
    Сделать scope, вынести его в trait и использовать в нужных вам моделях
    Ответ написан
    Комментировать
  • Как проверить наличие файла на удаленном сервере?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Для начала надо открыть тебе страшную тайну: на удаленном сервере не бывает файлов.
    После усвоения этой истины следует приступить к изучению протокола НТТР и, в частности, кодов ответа.
    Не бог весть какой точный индикатор, конечно, но других вариантов все равно нет.

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

    Кстати, у меня твой первый код работает, есличо.
    Ответ написан
    Комментировать
  • Как выстроить отношения между Eloquent моделями Laravel 5?

    cha-cha
    @cha-cha
    class Article extends Eloquent{
        public function images(){
            return $this->belongsToMany('Image', 'article_images', 'article_id', 'image_id');
        }
    }
    Ответ написан
    3 комментария
  • Как поменять скроллбар на сайте?

    standy
    @standy
    Самый лучший способ, это css. Поскольку большинство скроллбаров на javascript подменяют нативный интерфейс скрола, из-за чего, например, перестают работать клавиши (приходится эмулировать на js), и перестает работать плавная прокрутка при нажатии средней кнопки мыши.

    Статьи на тему кастомизации скроллбара на css:
    css-tricks.com/snippets/sass/custom-scrollbars-mixin
    codemug.com/html/custom-scrollbars-using-css
    Нужно учитывать, что в данный момент нет способа для ФФ

    Для большей кроссбраузерности, и чтобы получить больше свободы в кастомизации, я написал собственный плагин на jquery: jquery.custom-scroll
    Отличительная особенность от других плагинов — он не убирает нативный скролл полностью, а прячет, благодаря чему нет проблем описанных выше.
    Есть похожее решение на js - baron.js - он не требует jquery, но весит вчетверо больше.
    Ответ написан
    5 комментариев
  • Yii2 (front, back) + github. Howto?

    ghost404
    @ghost404
    PHP Developer
    рекомендую почитать про модули
    Ответ написан
    Комментировать
  • Есть ли видео курс по git и github?

    xSkyFoXx
    @xSkyFoXx
    Ответ написан
    Комментировать
  • Как правильно настроит почту в Laravel (4.2)?

    Поставьте либо true для pretend, либо драйвер log, чтобы проверить, что оно (письмо) формируется и пытается быть отправленным. И если в логах что-нибудь обнаружите, то копайте в сторону возможностей Вашего окружения работать с почтой...
    Ответ написан
    7 комментариев
  • Запуск Laravel - Error in exception handler?

    @vadimstroganov Автор вопроса
    Решил проблему!

    php artisan cache:clear 
    
    chmod -R 777 app/storage 
    
    php artisan dump-autoload
    Ответ написан
    2 комментария
  • Откуда взять информацию по созданию дата-центров (от А до Я)?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Что касается каналов связи в датацентрах, то даже если провайдер физически может предоставить линк только в 1гб, то ничего не стоит попросить подключение по двум, трём, десяти (далее везде) линкам. Это называется бондинг или транкинг, когда несколько физических линий объединяются в один логический линк.
    Ответ написан
  • Откуда взять информацию по созданию дата-центров (от А до Я)?

    @throughtheether
    human after all
    К сожалению, узбекскими реалиями я не владею, но пару мыслей могу высказать.
    То есть как подключить свои серверы к интернету.
    Как вообще устроен интернет. Основа - физическая инфраструктура, то есть, грубо говоря, кабельные сети. Не будет канальной емкости - не будет быстрого интернета. Затем, поверх этой инфраструктуры обеспечивается IP-связность, для обмена данными об IP-сетях используется протокол BGP. У каждого "кусочка интернета" есть свой номер автономной системы (AS в терминах BGP), своя доля адресного пространства IP и оборудование, обеспечивающее IP/BGP функциональность. Каждая такая автономная система устанавливает отношения с другими автономными системами, может слать трафик до их сетей и принимать трафик от них. Очень часто в этих отношениях доминирует коммерческая нота или политика другого уровня.
    Нужно чтобы и Узбекистанцам не было проблем с трафиком. Трафик внутри Узбекистана бесплатен, а мир дороговато (ваши 20-100 мб/с (безлимит) = у нас 1-4 мб/с (500 - 10000 мб)).
    Теперь применим это к Узбекистану. Насколько я понял (а помог мне этот сайт), "точкой входа" зарубежного трафика для Узбекистана является Узбектелеком, AS28910. Узбектелеком меняется трафиком с российскими, казахским и немецким операторами связи, притом, практически наверняка, платит за это приличные деньги.

    Теперь, какие пути к улучшению ситуации.
    1) Увеличить объемы трафика между Узбектелекомом и его аплинками (Ростелекомом, Вымпелкомом, Транстелекомом, Казахтелекомом, Мегафоном, немцами). Для кардинального улучшения, предполагаю, может потребоваться обновление оборудования и увеличение канальной емкости (проложить дополнительные волокна и т.д.). Это большие деньги. Кроме того, не надо быть особым знатоком узбекских реалий, чтобы предположить, что такие вопросы контролируют уважаемые люди, которые отвечают перед еще более уважаемыми людьми. У этих людей может быть свое видение развитие узбекского сегмента интернета, отличное от вашего. Например, они могут иметь основания опасаться повторения "твиттер-революций".
    2) Самому стать новым Узбектелекомом. Это, в моем представлении, потребует еще больших денег и протекции.
    3) Просто ждать и надеяться на лучшее. С развитием интернета (и его узбекского сегмента) объемы трафика будут увеличиваться, что заставит и Узбектелеком развивать соответствующую инфраструктуру. Развитие потребительского интернета во многих странах идет схожим образом, только с некоторым опережением/запаздыванием.
    4) Развитие пункта 3 - развивать узбекский сегмент интернета, приближая будущее, с роботами и оптикой в каждый дом. Если вы создадите востребованный (не только в Узбекистане, но и в странах СНГ) сервис, рабочие места, налоговые отчисления, то обосновать необходимость перемен будет проще, на мой взгляд.

    Вкратце - построить дата-центр недостаточно, надо развивать отношения с зарубежными операторами связи. Ждать, что ситуация кардинально изменится по мановению волшебной палочки, не стоит. Но и отчаиваться тоже - прогресс неизбежен.
    Ответ написан
    1 комментарий
  • Как работать с браузерами (Н: заполнить форму) на языках Java или Python?

    @maxoot
    Grab - простой и понятный способ.
    Selenium - использование браузера.
    Если в формах присутствует JS, то подойдет второй вариант.
    Недавно нужно было спарсить оприделенную инфу со страницы, которая подгружалась средствами JavaScript. Помог Selenium, браузером указал PhantomJS.
    Ответ написан
    1 комментарий
  • Какие приложения пишут на python web разработчики?

    Изначально Django вырос из контентного проекта (CMS газеты Lawrence Journal-World), соответственно в первых версиях Джанго был заточен именно под такого рода вещи. Сейчас, конечно можно делать абсолютно любые проекты.
    Ответ написан
    Комментировать
  • Какие приложения пишут на python web разработчики?

    Tiendil
    @Tiendil
    Разработчик ПО.
    На Python+Django пишут всё.

    Вот, например, worldoftanks.ru (и большинство сопутствующих сервисов на них сделано).

    Небольшой перечень сайтов на Django: https://www.djangosites.org/
    Ответ написан
    Комментировать
  • Как установить NPM на ubuntu 14.04?

    mahnunchik
    @mahnunchik
    https://about.me/vlasenko
    Советую использовать последний стабильный релиз из ppa:

    sudo add-apt-repository ppa:chris-lea/node.js
    sudo apt-get update
    sudo apt-get install python-software-properties python g++ make nodejs


    npm идет в одном пакете с nodejs

    Подробнее в официальной документации: https://github.com/joyent/node/wiki/Installing-Nod...
    Ответ написан
    Комментировать
  • Какой язык выбрать для написания самообучаемого бота MMORPG?

    stream13
    @stream13
    Тяга к творчеству это хорошо, но в планах наблюдается бардак.
    Я бы посоветовал использовать один язык для всего, не использовать С и С++, и пока не делать веб морды. Код на С++ пишется дольше и требует больше знаний, а на С и подавно.

    1) выбрать Java. из-за простоты, гибкости и неплохой производительности.
    2) написать минимальского бота, который может хотя бы законнектиться к серверу.
    3) по очереди добавить в бота возможности банально ходить, атаковать, и что там еще можно.
    4) научить бота делать эти вещи по команде/таймеру/etc . А именно, научить его парсить JSON или обрабатывать LUA-скрипты или еще что-то
    5) научиться адекватно передавать в программу полученные от сервера данные об локации и окружающих существах. и обрабатывать их (скриптом - ?)
    6) RTFM про перцептрон
    7) Начать совмещать обработчик комманд и входящих данных с инфой по ИИ: дать боту цель и заставить анализирвоать возможные пути ее достижения, перебирая их. Научить бота выбирать оптимальные пути. Добавить новые цели и параметризацию целей.

    И вот когда бот начнет хотя бы более-менее осознанно дрыгаться и бить монстров, вполне можно наворотить вывод его инфы в MySQL/MongoDB/etc и начать отрисовывать страницы через отдельный кусок софта.
    Через Python/PHP/..., на приснопамятном, последнем Ubuntu Server.

    Почему так? Ну как минимум потому, что вебморда -- это не более чем интерфейс для телеметрии и управления, и пишется она за вечер-два(простенькая). Это маленькая и минимально полезная часть системы.
    А вот написать демона, который бегает по игровому миру и пытается анализировать происходящее -- задача нетривиальная и объемная.
    Ответ написан
    4 комментария
  • В чем недостатки Java для веб-разработки?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Забавно читать ответы.

    Когда читал Философию Java, автор высоко оценивал python. И не с проста. Как и Java, у Python свои плюсы.

    По производительности что Python, то и Java примерно равны. Python имеет "нативный" byte-code, если так можно выразиться (не смотря на то, что его портировали и на CIL, и на JVM, и на сам Python). Так что здесь паритет.

    По удобству зависит от проекта и задач. Если цель - сделать как можно быстрее, то Python явно удобнее. Ибо можно набросать прототип в интерактиве, немного подправить его и вауля - проект "готов". Если цель надёжность - наш выбор Java: статическая типизация и компилируемость выявляет сотни ошибок ещё до запуска приложения.

    Стоит заметить, что вэб в Java развит очень сильно. Причём настолько, что он просочился до клиентских вэб-приложений (и умер лет 10 назад), хотя backend всё равно в разы сильнее. Что это значит? Это значит, что для Java есть множество отличных фреймворков, ориентированных на web. Каноничная реализация ООП позволяет использовать паттерны банды четырёх "из коробки". Интерфейсы, если ими уметь пользоваться, решают. Python же не создавался как web-движок, а создавался просто как удобный инструмент для быстрого программирования как прикладных, так и теоретических задач. В этом помогает всё - и сахарный синтаксис, и крутейшие итераторы, и пресловутый интерактивный режим, и невероятные slice'ы, и неплохие лямбды, и красивый код. RoR, если говорить о языке фреймворка, так же сильно похож на Python, но магии в нём много больше. Но Python-приложения тяжко отлаживать. Можно пару лет вести баг, который окажется из-за того, что мы не проверили возможность преобразования объекта к строке в аргументах. Динамическая типизация, причём очень хардовая из всех, наверное, это и дар и проклятие.

    Собственно, если вопрос стоит "стоит ли изучать", то да, конечно стоит. Как и Java, Python - мультипарадигмальный язык, и те практики, которые Вы изучите в Python несомненно улучшат код в Java.
    Ответ написан
    7 комментариев