• Yii Framework: почему появляется ошибка PHP notice Trying to get property of non-object?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Здравствуйте, Антон.

    Скорее всего у вас так настроен сервер, в вашей версии php должен быть файл php.ini
    Посмотрите, что написано в строке с параметром
    error_reporting = '....
    Иногда, в серверах указывается вывод ошибки, некоторые при настройке Битрикса там меняют параметры.

    Чтобы не вылезала ошибка "Trying to get property of non-object", напишите так:
    error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT

    На виртуальных хостингах эти ошибки скрываются, и существуют как паранормальные явления, никто не верит, что эти ошибки есть, но они существуют, просто тайные хостинг-провайдеры скрывают от вас правду, чтобы вы не знали об этом, но уверяю вас non-object существует!
    Это был сарказм, конечно же вы это знаете, иначе бы не написали об этом здесь.
    Ответ написан
    3 комментария
  • Как увеличить время сессии в yii?

    sanchezzzhak
    @sanchezzzhak
    Ля ля ля...
    php.net/manual/ru/session.configuration.php#ini.se...

    Время жизни сессии меняется в настройках php.ini, через htaccess если используйте апач или через php.

    Откройте index.php
    ini_set('session.gc_maxlifetime', 120960);
    ini_set('session.cookie_lifetime', 120960);
    ini_set('session.save_path', __DIR__.'/../sessions/');
    Ответ написан
    Комментировать
  • Как увеличить время сессии в yii?

    @yiiworld
    Для Yii2 нужно добавить в конфигурацию(/config/web.php для базового приложения) значение timeout с указанным количеством секунд.
    Например на 10 лет:
    $config = [
    ...
    	'components' => [
            ...
    		'session'=>[
    	    		'timeout'=>10*365*24*60*60,
    		],
    	...
    	],
    ...
    ];
    Ответ написан
    Комментировать
  • Как спроектировать страницу авторизации с точки зрения паттерна MVC на PHP?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Или же я вообще пишу глупость

    В целом да. Но

    вся эта логика прекрасно будет в index.php лежать?

    - это гораздо большая глупость.
    Ну то есть лежать-то будет, но к MVC уже никакого отношения не будет иметь.

    По пунктам

    Юзер не должен принимать в конструкторе логин и пароль.
    Вот сейчас эта страница отображает мне двух юзеров помимо меня. Их обоих надо создавать с логином и паролем, серьёзно?

    Что такое AuthPage вообще непонятно. Модель, контроллер? По базе проверяет модель, куки пишет контроллер. А здесь какой-то кадавр.

    Перед тем как писать авторизацию "в стиле MVC", надо сначала разобраться, что такое модель, что такое контроллер, и что такое вью.

    Модель - это вся логика приложения.
    Контроллер - это интерфейс для общения модели с браузером. Делает всё, связанное с обработкой НТТР запросов.
    Вью - отображение.

    Как правильно.

    Соответственно в модели должен быть класс User с методом auth(), который принимает логин и пароль и возвращает инстанс класса Юзер.
    В конторе делается экшен: отдельный метод, который
    - проверяет, если был запрос методом ПОСТ, то берет из него логин и пароль,
    - валидирует их, если валидация не прошла, то создает ошибку, которую надо показать юзеру
    - если прошла, то вызывает метод auth() модели User, передавая в него логин и пароль
    - если совпали, то пишет в сессию ид юзера, и делает редирект куда-нибудь
    - если не совпали, то создает ошибку, которую надо показать юзеру
    - вызывает вью с формой для логина и пароля

    Для регистрации делается еще один экшен, который
    - проверяет, если был запрос методом ПОСТ, то берет из него данные для регистрации,
    - валидирует их, если валидация не прошла, то создает ошибку, которую надо показать юзеру
    - если прошла, то то заполняет класс User данными и выполняет метод save() и делает редирект куда-нибудь
    - вызывает вью с формой для регистрации

    Для личного кабинета делается третий экшен, который берет из сессии ид юзера, обращается к методу read() модели User и через View показывает личный кабинет

    Варианты реализации

    Самый простой вариант реализации контроллера - это папочка с отдельными файлами-экшенами. Ничего плохого в такой архитектуре нет, этот этап надо пройти, если раньше так не делали.

    То есть папка user в которой есть, скажем, файл index.php который является экшеном личного кабинета.
    Он проверяет юзера в сессии, и если нету, то перекидывает на auth.php
    в auth.php есть форма и ссылочка на register.php
    Все три файла инклюдят в себя файл user.php из папки model, в котором есть функции auth(), register() и profile()

    Но в более классическом варианта к трем буквам MVC добавляется ещё одна - R, роутер. Специальный сервис, который разбирает адресную строку, и видя, например, что к сайту обратились по адресу /user/register, создаёт экземпляр класса UserController и вызывает его метод register()
    Ответ написан
    4 комментария
  • Как сделать прокрутку до элемента?

    $('ul.menu a').on('click', function(e){
      var goto = $(this).data('anchor');
      $('html,body').stop().animate({ scrollTop: $(goto).offset().top-60 }, 1000);
      e.preventDefault();
    });

    Само меню:
    <ul class="menu">
    						<li><a href="#" data-anchor="#about">О компании</a></li>
    						<li><a href="#" data-anchor="#features">Услуги</a></li>
    						<li><a href="#" data-anchor="#calculate">Онлайн расчет</a></li>
    						<li><a href="#" data-anchor="#faq">Ответы на вопросы</a></li>
    					</ul>


    В data-anhor указываете ID блока, до которого прокручивать при клике по ссылке.
    Ответ написан
    8 комментариев
  • Глобальные переменные yii2?

    iiifx
    @iiifx
    PHP, OOP, SOLID, Yii2, Composer, PHPStorm
    > Было бы не плохо записать адреса в config/params.php но как потом оттуда доставать значения?

    Yii::$app->params[ '...' ];
    Ответ написан
    2 комментария
  • Какой lazy load лучше?

    approximate_solution
    @approximate_solution
    JS Developer. Angular\React\Vue\Ember
    Какой лейзи лоад лучше?

    Который работает как правило. Хуже - тот который не работает.

    https://www.directline.pro/blog/lazy-load/
    Ответ написан
    Комментировать
  • Какой lazy load лучше?

    @RuSaG0
    Здесь очень подробно мужик рассказал о нативном lazy load или почему его вообще не стоит использовать
    https://www.youtube.com/watch?v=v8yM0-VIM30
    Ответ написан
    Комментировать
  • Роботы (боты) просматривают контент на сайте?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    - 1 запрос раз в 5 секунд, это не является "невероятно частыми" запросами. Невероятно частые это когда приходит GoogleBot или YandexBot и сканирует сайт со скорость 5-10 запросов в секунду.
    - боты как правило не поддерживают cookies и соотв-но каждое открытие страницы для них стартует новая сессия
    - я бы на вашем месте логировал так же user agent который бы подсказал что по этому ip - user agent
    Mozilla/5.0 (compatible; Adsbot/3.1)

    - как правило легитимные боты и сканеры не пытаются маскироваться под реальных людей и их можно определять по user agent и не стартовать им сессию, а так же не учитывать просмотры. Можно использовать готовую библиотеку для детекта ботов и краулеров, например https://github.com/JayBizzle/Crawler-Detect
    Ответ написан
    2 комментария
  • Считать ли опыт разработки под битрикс полноценным опытом в php?

    north_leshiy
    @north_leshiy
    Руководитель направления разработки
    Смотря над чем ты работаешь.

    Вариант 1:
    Ты попадаешь в студию где битрикс используется как CMS. Основная работа - над готовыми шаблонами и их адаптацией. Программирования минимум.
    Это слабый опыт для PHP разработчика.

    Вариант 2:
    Ты попадешь в крупную компанию которая пилит сложные высоконагруженные магазины или гос сервисы. Много кода и погружения в FW Bitrix. Это весьма релевантный опыт, и он может быть куда лучше чем опыт на FW но в маленькой говностудии, где ты будешь шлепать мелкие сайты и заниматься шаблонами, а не бизнес логикой.

    Правильный ответ: в зависимости от компании в которую ты попадешь и проектов над которыми ты будешь работать.
    Ответ написан
    Комментировать
  • Как померять реальную нагрузку на блок питания?

    optemist
    @optemist
    1. Втыкался амперметром в разрез, действенно и наглядно.
    Мой конфиг:
    Inel Quad Core 8200@2800Mhz,
    2xSeagate Barracuda Raid0
    4Gb DDR2 Ram@1066Mhz
    Radeon 5830@Gpu 1000Mhz.
    В нагрузке показал 1,2Ампера, что в итоге около 275 Ватт. А в простое 0.3 Ампера ~ 70 Ватт.
    2. Можно воспользоваться калькулятором мощности, меня он еще никогда не подводил.
    Ответ написан
    3 комментария
  • Как померять реальную нагрузку на блок питания?

    Блок питания должен подбираться соизмеримо нагрузке.
    Т.к. схема работы блока — импульсная — то КПД при небольшой нагрузке будет очень низкий — в районе 50% к примеру, а при нагрузке около 40-50% — уже подымется к 75-80%, т.е. без нагрузки большая часть получаемой энергии будет уходить на разогрев компонентов самого БП -) + если нагрузка будет небольшая по основой 12В шине, а по 5В побольше к примеру — тоже может снижается КПД.

    Для вышеописанного компьютера (при условии отсутствия внешней видеокарты, 10 15000 Сигейт харддисков и миниатюрного сварочного аппарата) — 350 Вт («настоящих») хватит за глаза. Такой компьютер в пике нагрузки подребляет в районе 200Вт, которые делим на 0.75 кпд = 270 Вт. И еще 80 остается в запасе, на случай высыхания конденсаторов/эксплуатации в жаркую погоду.

    Интересная статья — www.fcenter.ru/online.shtml?articles/hardware/tower/26716

    Вообще сильно рекомендую п
    Ответ написан
    4 комментария
  • Актуален ли Yii2 Фреймворк в 2020?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    Тут много нюансов и ответить однозначно сложно. Как уже написал Иван Шумов фреймворк - это инструмент. Каждый инструмент подбирается под конкретную задачу:

    • СMS - система управления сайтом (Wordpress, Joomla и т.д.). Создан для простого и удобного управления сайтом (контентом). Как правило, доступен для работы простому пользователю, без знания языков программирования. Подойдёт для: простых сайтов, блогов, там где не требуется нагрузка и безопасность.
    • RAD framework (Yii2) - фреймворк для быстрой разработки. RAD Фреймворк имеет, монолитную и связанную архитектуру. Он является антипаттенрном и позволяет вам делать всё что угодно, лишь бы вы быстро собрали свой проект. (Используется паттерн Table First - спроектировали базу и по схеме сгенерировали модели данных). При этом Вам никто не говорит, что он не может использоваться для серьёзных проектов. Например, DNS..
    • Компонентные фреймворки (Symfony, Laravel). Это фреймворки, которые разделены на независимые компоненты, которые вы можете подключать к своему проекту при необходимости. В самом фреймворке заложен только необходимый минимум, а всё остальное вынесено в компоненты. Эти компоненты могут использоваться (или не использоваться). Могут использоваться для другого фреймворка (сам Yii2 использует компоненты симфони). Doctirine, которая позволяет вам забыть о базе данных и сосредоточиться на коде. Фреймворк задаёт вам некий стиль, некую структуру и типизацию и требует более хорошего и обдуманного кодинга. Например, при использовании twig вы не сможете сделать запрос в view. Чего нельзя сказать про Yii. Вы там можете построить хорошую бизнес логику, что и встречается...
    • Микрофреймворки (Slim). В таких фреймворках заложен самый минимум, а всё остальное программист должен искать или писать самостоятельно, выстраивать свою архитектуру приложения. Он легкий и простой. Кто-то и Symfony относит к микрофреймворкам. Тут меня многие могут упрекнуть. Подойдет для очень простых, гибких, легких приложений, например, микросервисов. Фреймворк не задает вам никаких правил и архитектуры. Вы должны сами продумать все детали приложения. Где-то используете twig, где то Data Mapper, где-то ActiveRecord. Для работы с таким фреймворком требуется много знаний и опыта. Так как вам всё придется делать самому. Здесь за вас никто не подумал.

    Что же для чего выбрать?
    Решать вам исходя из конкретной задачи. Здесь нет понятия хуже/лучше. Чтобы что-то выбрать нужно на каждом попробовать собрать пару проектов. Тогда и будет понимание когда и что выбирать. Это как автомобиль. Какой лучше BMW или LADA? Оба автомобиля, но каждый для своей аудитории, по своим потребностям, для своих задач.

    Почему другие говорят что Yii2 плохой?
    • 2 версия морально устарела. Это не значит что ВЕСЬ фреймворк плохой, просто им давно никто не занимался. Сейчас идет разработка Yii3, которая многократно лучше 2 версии, но 3 версия доступна только в демо. Поэтому, если хочется писать НОВЫЙ проект на Yii, то я бы не стал выбирать 2 версию. Можете подождать Yii3, но никто не знает когда будет релиз. Можете начать писать используя Yii3-demo, но там может всё поменяться к моменту релиза.
    • Он монолитный. Если вам требуется сделать проект используя много приложений с разными компонентами, то пойдёте по пути Advanced шаблона, где каждое приложение будет папкой: backend, forntend, console. Однако при большой нагрузке вам потребуется разносить приложения. Тогда ваш core будет дублироваться во всех приложениях. Там будет то, что вам даже не требуется. Потому что Yii2 монолит.
    • В Yii2 используется Actvie Record. AR - это не плохо. Его многие любят, многие ценят и хвалят. Но для больших проектов он предоставляет неудобства. Например, при изменении поля в базе данных - приходится менять все свойства и надеяться что везде поменяли, так как в GrigView используется магия, при получение значений из модели 'value' => 'profile.last_name'. Так же нельзя сделать свойства модели (сущности), приватными. Из-за чего состояние модели можно изменить где угодно и вы никак не проконтролируете это.
    • Много абстракции, которую не распознает редактор. Например, вы можете вызвать в контроллере Yii::$app->user->id. Вам приходится делать докблок, что User это common/auth/Identity, а не yii/web/User


    Ну и так далее. С каждым из этих пунктов можно бороться, при правильном подходе. Как уже сказали в плохих руках любой код может пахнуть. Но это основное. Надеюсь, меня не раскритикуют другие за спорные моменты. В таких вопросах всегда есть разногласия) Думаю, что смог донести в сжатом виде отличия.
    Ответ написан
    4 комментария
  • Как работать с большими массивами на php?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Чтобы не в памяти, можно на диск. Сохранить массив чисел в файл. Для компактности как бинарный файл, по 4 байта на число pack() (если это 32-битные id ВКонтакте вы сравниваете. Facebook id — лонги). Отсортированным. Тот же ВК умеет отдавать список сортированным. Сохранить так же второй.

    Открыть оба файла, считать fread($fh, 4) из каждого по числу: число А, число Б.
    А больше Б ? Читаем новый Б.
    Б больше А ? Читаем новый А.
    Равны? Ура, это число сохраняем в «пересечение». Читаем новый А и новый Б.
    Закончился один из файлов — пересечений больше нет.
    Ответ написан
    Комментировать
  • Как работать с большими массивами на php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Я думаю, самым разумным решением будет писать эти массивы в базу и сравнивать простым запросом. Именно так в общем случае решается задача "сравнение двух больших массивов данных на РНР." Конкретную же реализацию можно будет предложить только если будет конкретный вопрос, без "может быть " и "например".

    Да, память в БД тоже не бесплатная, но тут надо уже определиться - или мы хотим ворочать гигазы варезов, или сидеть на копеечном впс с 500 метрами памяти. Одновременно не получится.

    Можно конечно извернуться и скомпилить специальное расширение, которое как раз и предназначается для работы с иллимонами элементов, но опять же - все зависит от возможностей и потребностей.
    Ответ написан
    1 комментарий
  • Как количество страниц влияет на SEO интернет-магазина?

    Попробую высказать своё мнение по данному вопросу:
    1) Вероятней всего одна из причин большого количества страниц это наличие поиска на сайте который под каждый запрос генерирует новую страницу.
    2) При условии что на этих сгенерированных страницах стоит cannocical для того же гугла дублям они не являются. К тому же страницы поиска просто могут быть закрыты от индексации
    3) При реалиях сегодняшнего дня я бы сказал что влияение сейчас оказывает не количство, а качество. Хотя уверен что некоторые со мной не согласятся.
    4) Намеренно раздувать количество страниц точно не стоит. Соберите хорошую семантику, граммотно её раскидайте(максимально точно и не размазывая) и будет вам профит. Учтите что сайты которые сейчас висят в топе находятся там не только из-за количества страниц, но и по ряду других куда более важных факторов.
    5) Если под общетематическими вы подразумеваете сайты агрегаторы, то они выезжают на общем трасте к ресурсу + перелинковка и т.д. Но опять же это не значит что вы не сможете откусить кусок пирога в более узкой нише.
    Ответ написан
    Комментировать
  • Как количество страниц влияет на SEO интернет-магазина?

    @bes_internal
    webdev: perl, gentoo, html/css
    1. Нужно определиться, что является страницей и товаром в вашем интернет-магазине. Например кровати разных размеров или цветов - это отдельные страницы или эти параметры выбираются уже на самой странице модели? А у конкурентов. Вот отсюда уже может идти различие в количестве страниц. В разных тематиках это может быть и плюсом и минусом (цвет кровати никто не будет искать - вы не получите низкочастотные запросы, а вот сверло 6мм будут)
    2. Само по себе количество страниц, исходя из логики, никак не может негативно влять на поиск, если все страницы отвечают на свой поисковый запрос (thing brand model). Если это не так, то у вас будут искаться только разделы, отвечающие на общие запросы (кровать, шкаф), поэтому тут количество страниц нужно только для ассортимента.
    3. Поисковики видят ширину ассортимента
    4. Фильтры, фасеточный поиск у конкурентов может быть индексируемым. Отсюда автоматически могут получаться свои страницы. В разделе шкаф есть фильтры и получаются индексируемые выборки например: платяной шкаф, раздвижной шкаф, шкаф и т.д по всем параметрам. Теоретически это дает точны ответ для поисковика на низкочастотные запросы, но такие страницы могут быть низкокачественными или дублироваться.
    5. Количество страниц на сайте негативно влияет на продвижение т.к есть лимит поисковика на обход страниц сайта в сутки. Т.е получается косвенно сайт медленее переидексируется, если вы внесли какие-то изменения или улучшили отдельные страницы. Плюс сюда можно добавить "размытие" поисковых ответов, т.к уследить за 100000+ страниц с точки зрения консолидации запросов-ответов практически невозможно.
    6. Предпочтение поисковики отдают, конечно, магазинам (да и вообще сайтам) с большей репутацией (возраст, известность в интренете, ассортимент, кликабельность в поиске, время на сайте). В идеале чтобы в интернете осталось 10 крупных магазинов. А мелкие работали только по узким направлениям (не пересекающихся с крупным ритейлом)
    Ответ написан
    Комментировать
  • Как скачать с github отдельную папку?

    longclaps
    @longclaps
    Скачай zip-архив и возьми из него папку.
    Ответ написан
    1 комментарий