Задать вопрос
  • Правильно ли выбрасывать исключения в бизнес логике?

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

    Исключения гораздо глубже, чем просто "исключительная ситуация". Они помогают развести обработку ошибок по разным уровням абстракции, а использование разных типов исключений позволяет обрабатывать конкретные ошибки там, где их нужно обработать (на нужном слое). Исключения очень помогают в локализации ошибки в дальнейшем, они позволяют избавиться от простыни If .. else, проверок на null, false и прочей ереси. Они, чаще всего, делают код чище.

    Но пользоваться ими стоит аккуратно, все-таки стоит разделять исключительную ситуацию и вполне нормальную, штатную ветку исполнения. Так, если заказов нет - это НЕ исключение, тут можно вернуть null - допустимо (хотя некоторые и тут выбрасывают исключение, потому что очень соблазнительно привязать код исключения к HTTP кодам). А если у вас аплоад документов, и юзер пытается загрузить файл слишком большой, то это уже исключение.
    Ответ написан
    1 комментарий
  • Откуда вы черпаете идеи для дизайна?

    zahmTOD
    @zahmTOD
    Графический дизайнер
    Что вы имеете ввиду под «креативное»? В интерфейсах достаточно жесткие рамки, чтобы страдать фигней, особенно в массовом продукте.

    А так — отдыхайте. Займитесь чем-то ненавязчивым, съездите в другой город, просто сделайте генеральную уборку. Основная задача — не думать о работе.
    Ответ написан
    Комментировать
  • Автоматический phpDoc в Laravel?

    @vism
    Комментировать
  • Может ли новый абонент, купивший мой старый номер телефона, войти в мои мессенджеры?

    Keffer
    @Keffer
    ICANN
    Меняешь во всех сервисах старый номер на новый. И будет счастье. Что трудного то?
    Ответ написан
    3 комментария
  • Нормально ли будет взять October CMS за основу сайта?

    neuotq
    @neuotq
    Прокрастинация
    Ну, откровенно говоря он избыточен. October CMS можно сказать wordpress в мире Laravel.
    Те просто ради админки его брать нет смысла. А вот если вы хотите использовать их обширную библиотеку готовых плагинов то да.
    А так лучше подобрать из готовых кирпичиков круд админки, ларавел пакеты для управления ролями(например spatie/laravel-permission удобен достаточно, у spatie вообще много неплохих пакетов) и тп.
    Ответ написан
    Комментировать
  • Прием он-лайн платежей из Казахстана. Какие есть варианты?

    В настоящее время интернет-эквайринг в Казахстане возможен через две компании:
    • Казкоммерцбанк (epay.kkb.kz)
    • processing.kz
    Я разработал модуль интернет-эквайринга через Казкоммерцбанк (epay.kkb.kz) для Российской сборки Magento: magento-forum.ru/forum/324.
    Ответ написан
    Комментировать
  • Как устроиться на работу в РФ удаленно гражданину Казахстана?

    @anton99zel
    29а класс средней школы №7
    Можно ли как-то официально устроиться удаленно не имея ИП?

    Что за вопрос то?
    Конечно можно. Другое дело, что ваш работодатель так не хочет, а вернее хочет платить деньги как контрагенту, а не как сотруднику.
    Вполне рабочая схема - просите в России у знакомых поработать через их ИП.
    Они заключают договор с вашим работодателем об оказании услуг, деньги получать будете на карту в валюте. Но в таком случае нужно делиться от 7% от суммы дохода и выше + как то узаконивать получение денег в вашей стране.
    Ответ написан
    2 комментария
  • Стоит ли интернет-магазину в 2020 году полагаться на SEO-оптимизацию, как на основной источник клиентов?

    opium
    @opium
    Просто люблю качественно работать
    дурацкий какой то вопрос
    сео вы сделали и оно потом как бы бесплатно несет клиентов
    а за рекламу вы платите за каждый клик
    собственно все не сидят на рекламе только по одной причине , либо нельзя рекламироваться, либо сео дешевле выходит
    в 2020 году в этом плане ничего не изменилось
    трачу 100к на сео получаю трафик бесплатно в гигантских обьемах в разрезе года клики по рублю в итоге , а в рекламе клики по 5 баксов

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

    так что на директе надо было сидеть раньше
    Ответ написан
    2 комментария
  • Как узнать откуда был загружен iframe?

    @granty
    Откуда был загружен iframe никак не узнать (узнать-то можно, но в вашем случае это не поможет).

    1. яваскрипт не сработает, тк политика «Одинакового источника» (Same Origin Policy) запрещает доступ из ифрейма к window.top.location.href, если они имеют разные происхождения (грубо говоря - разные домены).
    Проверить window.top != window.self браузер даёт, а доступ к фактическому url из window.top - нет.

    2. на сервере проверять переменную $_SERVER['HTTP_REFERER'] (кто запросил загрузку страницы) смысла тоже нет - если у ифрейма установлен атрибут referrerpolicy:
    <iframe referrerpolicy='no-referrer'>
    реферер не будет прислан (будет, но только в IE/Edge и Safari_IOS).


    Но сделать то, что вы хотите - можно легко. На странице надо издать HTTP-заголовок CSP с директивой frame-ancestors:
    header( "Content-Security-Policy: frame-ancestors https://ваш_сайт.ru http://ваш_сайт.ru https://www.facebook.com https://facebook.com https://www.google.com https://google.com;" );

    это разрешит открывать эту страницу в ифрейме с собственного домена ваш_сайт.ru(без поддоменов!) по http:/https:.
    И сайтам facebook.com и google.com с www или без (но только если фэйсбук/гугль загружены по https: - а их и невозможно загрузить по http:).

    PS: если ваш сайт доступен и по www - добавьте в "волшебную" строку:
    https://www.ваш_сайт.ru http://www.ваш_сайт.ru
    Ответ написан
    Комментировать
  • Битрикс CRM Получить ID контакта?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Есть как минимум 2 варианта (без прямых запросов в базу) как это сделать:

    1) Высокоуровневый (работает всегда). Метод с поддержкой обратной совместимости: CCrmContact::GetList (bxapi.ru/src/?id=183244)

    Применение (за основу взял код описанный Артем):

    /* @var array Список контактов */
    $arContacts = array();
    
    if ( \Bitrix\Main\Loader::IncludeModule('crm') )
    {
    	/* @var array Сортировка полученного списка контактов */
    	$arOrder  = array('ID' => 'DESC');
    
    	/* @var array Условия получаемого списка контактов */
    	$arFilter = array(
    		"NAME"      => "Имя",
    		"LAST_NAME" => "Фамилия",
    		'CHECK_PERMISSIONS' => 'N' // Данный ключ необходим для того чтобы получить всех пользоватей,
    								   // иначе, будет найден только если ответственным за него является тот,
    								   // под кем запускается скрипт в битриксе
    	);
    
    	/* @var array Получаемые поля для списка контактов */
    	$arSelect = array(
    		'ID'
    	);
    
    	// NOTE: Запрашивайте только необходимые поля
    	$res = CCrmContact::GetList( $arOrder, $arFilter, $arSelect );
    
    	while( $arContact = $res->fetch() )
    	{
    		$arContacts[ $arContact['ID'] ] = $arContact['ID'];
    	}
    }
    
    // Тут в $arContacts либо пустой массив, либо массив с ID контактами, которые соответствуют условию поиска


    2) Низкоуровневый DataMapper (новый подход d7)

    use \Bitrix\Main\Loader;
    use \Bitrix\Crm;
    
    /* @var array Список контактов */
    $arContacts = array();
    
    if ( Loader::IncludeModule('crm') )
    {
    
    	$resContacts = Crm\ContactTable::getList(array(
    		'select' => array('ID'),
    		'filter' => array(
    			"NAME"      => "Имя",
    			"LAST_NAME" => "Фамилия",
    		),
    		'order' => array('ID' => 'DESC')
    	));
    
    	while( $arContact = $resContacts->fetch() )
    	{
    		$arContacts[ $arContact['ID'] ] = $arContact['ID'];
    	}
    
    	/*
    	Начиная с 17 версии (вроде бы), можно делать так:
    	foreach( $resContacts as $arContact)
    	{
    		$arContacts[ $arContact['ID'] ] = $arContact['ID'];
    	}
    	вместо while цикла
    	*/
    }


    Преимущество первого подхода:
    - Работает всегда, как для новых, так и для старых проектов
    - Можно использовать уровни доступа

    Преимущество нового подхода:
    - Технологически универсален за счет d7 (можно в runtime прибавлять связи, доставать связанные сущности и т.п.)
    - В DataMapper есть технология кеширования, т.е. можно закешировать результат просто добавив в массив getList еще один ключик
    - Субъективно код легче воспринимается
    Ответ написан
    3 комментария
  • Как правило организовать рабочее окружение web разработчика?

    Sanes
    @Sanes
    windows wsl
    Ответ написан
    Комментировать
  • Куда двигаться дальше?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Знаю, что отечественным компаниям совсем не нужны верстальщики-дизайнеры

    Отдельно не нужны дизайнеры и отдельно верстальщики, а вот дизайнеры-верстальщики ещё как нужны. Особенно, если дизайнер не тонкая натура, которая "так видит", а реальный ui/ux-специалист, делающий по науке. Таких мало, и за них натурально война.

    
Минусов фронта пока не вижу, может вы подскажете, какие подводные камни в этом направлении имеются.

    Минус фронтенда в безбожной конкуренции, фронтов как собак. Поэтому и высокооплачиваемый он далеко не для всех.
    Ответ написан
    5 комментариев
  • Зачем верстать вначале мобилку?

    delphinpro
    @delphinpro Куратор тега Вёрстка
    frontend developer
    Mobile first — это не только последовательность медиа-запросов.
    В первую очередь этот подход ориентируется на представление важного содержимого, легковесность и оптимизацию для мобильных устройств и мобильного интернета.
    Ответ написан
    Комментировать
  • Есть ли смысл делать SPA?

    Kozack
    @Kozack
    Thinking about a11y
    Быстрой пройдясь по тексту, похоже, что вам нужен сложный интерактивный интерфейс. В таком случае — да, фреймворк по типу Vue вам отлично подойдёт для этой задачи.
    Если нужно чуть больше функций — изучите возможности и примеры тут — https://nuxtjs.org/
    Ответ написан
  • Как подключиться к WhatsApp Bussiness API?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    Для стран бывшего советского союза они не предоставляют api. Да и у себя далеко не всем
    Ответ написан
  • Есть ли рекомендации по названиям миграций БД?

    Alex_Wells
    @Alex_Wells
    PHP/Kotlin
    Да без разницы, если честно. Она запустится единожды и дальше про нее можно забыть навсегда.

    Конфликты маловероятны, ни разу не стыкался.

    AddTargetTypeColumnToOptionsTable
    AddSomeSetOfFieldsToSomeTable
    MakeOptionFieldsNullable
    CreateSomeTable
    RenameSomeFieldInSomeTable
    RenamePackageTables

    Главное, что бы вам было удобно ее искать до того, как она закомичена. Остальное значения не имеет.
    Ответ написан
    Комментировать
  • Как вызвать событие родительского объекта из шаблона(template) vue js?

    0xD34F
    @0xD34F Куратор тега Vue.js
    В дочернем компоненте:

    <input @input="$emit('fucking-event')">

    В родителе:

    <fucking-component @fucking-event="onFuckingEvent">

    methods: {
      onFuckingEvent() {
        console.log('fuck off');
      },
    Ответ написан
    Комментировать
  • Как покрыть тестами новый пакет на Laravel?

    JhaoDa
    @JhaoDa
    LaravelRUS Team
    Открыть любой пакет из этого сообщества и посмотреть, как сделано там. Что помешало сделать это?
    Ответ написан
    2 комментария
  • Чем отличается windows 10 enterprice от ltsc?

    @mezhuev
    Системный администратор
    Enterprise — версия для настольных ПК. Является наиболее полной версией Windows, где разблокированы недоступные в младших редакция возможности. Новые версии выходят дважды в год, а обновления безопасности доступны в течение 18 месяцев с момента выхода.

    LTSC (Long-Term Servicing Channel), ранее известная как LTSB — версия для специализированных сред, где необходимо минимизировать время обслуживания и при этом не часто возникает необходимость в новых возможностях. Как следует из названия версия с долгосрочной поддержкой. Новые версии выходят один раз в несколько лет и поддерживаются до 10 лет после выпуска. В данной версии отсутствует магазин, Кортана и браузер Edge, а так же не работают UWP приложения. Самой Microsoft не рекомендуется к использованию на настольных ПК.

    Так же обратите внимание, что Enterprise и Enterprise LTSC — это разные лицензии.
    Ответ написан
    Комментировать
  • Как настроить работу с двумя базами на Laravel?

    VladimirAndreev
    @VladimirAndreev
    php web dev
    0. Вынести пользователей в отдельную бд
    1. Сконфигурировать 3 разных подключения - к базе юзеров, для русских, для американцев
    2. В конструкторе модели (кроме юзеров) получать группу и определять свойство $connection модели.
    Ответ написан
    4 комментария