Ответы пользователя по тегу PHP
  • В какое направление смотерть в PHP разработке?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    Тестовые для джуниора:
    Какие тестовые проекты стоит написать

    Фреймворки:


    На CMS смотреть не стоит, разве только если CMS интернет-магазинов (кроме Битрикса — это тупиковые знания, замкнутые сами на себя, и сомнительного качества)
    Ответ написан
    1 комментарий
  • Как создать такой массив программно (php)?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    <?php
    $array = new stdClass();
    $array->response = new stdClass();
    $array->response->count = 16;
    $array->response->items = [
    	[
    		"id" => "1",
    		"is_dir"=> "true" 
    	],
    	[
    		"id" => "1",
    		"is_dir"=> "true" 
    	],
    ];
     
    var_dump(json_encode($array)); 
    // string(89) "{"response":{"count":16,"items":[{"id":"1","is_dir":"true"},{"id":"1","is_dir":"true"}]}}"

    https://ideone.com/JjjPoU
    Ответ написан
    Комментировать
  • Что означает "dispatch" в php роутерах?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru

    Если очень обобщенно — после найденного роута из коллекции вы получаете атрибуты, доступные методы (GET, POST...) и обработчик с нужными действиями (например анонимка с экшном или коллбек метода контроллера)

    В чем-то могу ошибаться, советую посмотреть видео (особенно момент отделения коллекции роутов от роутинга, там нет именно такого метода, но другими путями все объяснено):
    https://www.youtube.com/watch?v=FkQ0IXnMxfA&index=...
    Ответ написан
    Комментировать
  • Как грамотно и красиво писать код php?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    Есть такой способ записи, начиная с PHP 7:
    php.net/manual/ru/language.operators.comparison.ph...
    <?php
    echo $apples ?? "Переменная удалена";

    Пример работы: https://ideone.com/DsjQfY


    Code Sniffer
    Есть замечательное решение — поставьте и после написания кода прогоняйте через него, он вам ругаться будет на пробелы, отступы и все-все-все. Можно даже хук поставить для гита и когда вы будете коммитить, он првоерит ваш код, и если есть косяки — не примет коммит
    Ответ написан
    3 комментария
  • Почему не срабатывает эта конструкция в Codeception?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    ?env=test
    Могу предположить, что далее в самих тестах вы не подставляете этот GET параметр,
    например при таких вызовах теряется ваш url:
    <?php
    $I->amOnPage('/quickstart'); // moves to http://codeception.com/quickstart
    ?>

    Но нужно тестить...

    У настройки модуля PhpBrowser есть Guzzle middlewear и Curl, попробуйте через них добавлять ко всем вашим вызовам GET параметр
    https://codeception.com/docs/modules/PhpBrowser

    upd:
    Поискал в исходниках, там код задокументирован неплохо (лучше, чем дока)
    Вот что нашел — можно использовать поля настройки для Guzzle (в доке используют auth) напрмиер query
    https://github.com/Codeception/Codeception/blob/2....

    Вот пример использования:
    https://github.com/Codeception/Codeception/blob/2....

    Я так понимаю прямо в вашем конфиге после url: mysite.ru нужно добавить query: ['env', 'test']
    В итоге ваш конфиг будет примерно так выглядеть:
    modules:
       enabled:
           - PhpBrowser:
               url: 'http://localhost'
               query: ['env', 'test']

    Боюсь не правильно массив задал, можно попробовать, :
    query: 
         env: test
    Ответ написан
    2 комментария
  • Какой php фреймворк можно понять / разобрать полностью?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    Прямо для вас, не пропустите...!

    PRS-7 фреймворк
    В серии видео полностью разбирается создание фреймворка,
    такого «универсала» по современым стандартам, последняя серия будет изо дня в день, все с тестами и плавно из одного решения в другое, смотреть на скорости 1.25


    Кишки фрейма:
    1. HTTP Response/Request PSR-7 (и компоненты для работы с ним)
    2. Построение контроллеров и роутинга (с переходом на Aura Router)
    3. Middlewear и Pipeline (а-ля Laravel, Slim, Symfony)
    4. DI контейнер (все фреймворки)
    5. Шаблонизаторы (+ пример на Twig из Symfony)
    6. ORM не точно
    Ответ написан
    8 комментариев
  • Нужно ли всегда писать implements?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    Это просто не имеет смысла, ведь дочерний класс уже имеет все защищенные и публичные методы
    Ответ написан
    Комментировать
  • Выгрузка 1с по стандарту СommerceMl2 как это понимать?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    О формате
    Тут передаются изображения или иные файлы? Какого они рода?

    • Из 1С передаются 2 файла: import.xml и offers.xml
    • а также картинки, как правило в эту же папку на сервере, куда грузятся и 2 файла с инфой

    import.xml — данные с товарами, категориями, свойствами товаров
    Пример import.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <КоммерческаяИнформация ВерсияСхемы="2.03" ДатаФормирования="2018-01-23">
    	<Классификатор>
    		<Ид>2460763d-004d-11df-8b40-001a4bb12848</Ид>
    		<Наименование>Классификатор (Каталог товаров)</Наименование>
    		<ТипВыгрузки>ПолнаяВыгрузка</ТипВыгрузки>
    		<Группы>
    			<Группа>
    				<Ид>8f55ea2c-1062-11e7-bdde-00155d007103</Ид>
    				<Наименование>Joggy</Наименование>
    				<Группы>
    					<Группа>
    						<Ид>76d5e03d-12c4-11e7-bdde-00155d007103</Ид>
    						<Наименование>Рубашки</Наименование>
    					</Группа>
    					<Группа>
    						<Ид>221c4591-9f47-11e7-8d7f-00155d007103</Ид>
    						<Наименование>Толстовки</Наименование>
    					</Группа>
    					<Группа>
    						<Ид>8f55ea2d-1062-11e7-bdde-00155d007103</Ид>
    						<Наименование>Футболки</Наименование>
    					</Группа>
    				</Группы>
    			</Группа>
    
    		</Группы>
    		<Свойства>
    			<СвойствоНоменклатуры>
    				<Ид>0734a3e9-005f-11df-8b40-001a4bb12848</Ид>
    				<Наименование>Страна</Наименование>
    				<Обязательное>false</Обязательное>
    				<Множественное>false</Множественное>
    				<ИспользованиеСвойства>true</ИспользованиеСвойства>
    			</СвойствоНоменклатуры>
    		</Свойства>
    	</Классификатор>
    	<Каталог>
    		<Ид>2460763d-004d-11df-8b40-001a4bb12848</Ид>
    		<ИдКлассификатора>2460763d-004d-11df-8b40-001a4bb12848</ИдКлассификатора>
    		<Наименование>Каталог товаров</Наименование>
    		<Товары>
    			<Товар>
    				<Ид>6a9f6996-ba02-11e7-9302-00155d007103#f14f4d23-baec-11e7-a79a-00155d007103</Ид>
    				<ШтрихКод>2000000848112</ШтрихКод>
    				<Артикул>049794</Артикул>
    				<ДатаСоздания>1508889600</ДатаСоздания>
    				<Наименование>ADSERY2 Джинсы 6225 (32-42/*7) женщинам</Наименование>
    				<КоличествоВПачке>7</КоличествоВПачке>
    				<БазоваяЕдиница Код="796" НаименованиеПолное="Штука" МеждународноеСокращение="PCE">шт</БазоваяЕдиница>
    				<ХарактеристикиТовара>
    					<ХарактеристикаТовара>
    						<Наименование>Размер</Наименование>
    						<Значение>33</Значение>
    					</ХарактеристикаТовара>
    					<ХарактеристикаТовара>
    						<Наименование>Рост</Наименование>
    						<Значение>32</Значение>
    					</ХарактеристикаТовара>
    				</ХарактеристикиТовара>
    				<ЗначенияРеквизитов>
    					<ЗначениеРеквизита>
    						<Наименование>ВидНоменклатуры</Наименование>
    						<Значение>Товар</Значение>
    					</ЗначениеРеквизита>
    					<ЗначениеРеквизита>
    						<Наименование>ТипНоменклатуры</Наименование>
    						<Значение>Товар</Значение>
    					</ЗначениеРеквизита>
    					<ЗначениеРеквизита>
    						<Наименование>Полное наименование</Наименование>
    						<Значение>Джинсы 6225 (32-42/*7) женщинам</Значение>
    					</ЗначениеРеквизита>
    				</ЗначенияРеквизитов>
    				<Группы>
    					<Ид>6a9f6995-ba02-11e7-9302-00155d007103</Ид>
    				</Группы>
    				<Описание>Утепленные джинсы актуального зауженного покроя. Декор в виде легких потертостей и строчки.</Описание>
    				<ЗначенияСвойств>
    					<ЗначенияСвойства>
    						<Ид>0734a3e9-005f-11df-8b40-001a4bb12848</Ид>
    						<Значение>Китай</Значение>
    					</ЗначенияСвойства>
    					<ЗначенияСвойства>
    						<Ид>074bce28-004f-11e8-9d7b-00155d007103</Ид>
    						<Значение>ADSERY2</Значение>
    					</ЗначенияСвойства>
    				</ЗначенияСвойств>
    			</Товар>
    		</Товары>
    
    	</Каталог>


    offers.xml — предложения (размеры, цвета, варианты и прочее с ценой и остатком) для товаров из предыдущего файла
    Пример offers.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <КоммерческаяИнформация ВерсияСхемы="2.03" ДатаФормирования="2018-01-23">
    	<ПакетПредложений>
    		<Ид>2460763d-004d-11df-8b40-001a4bb12848#</Ид>
    		<Наименование>Пакет предложений</Наименование>
    		<ИдКаталога>2460763d-004d-11df-8b40-001a4bb12848</ИдКаталога>
    		<ИдКлассификатора>2460763d-004d-11df-8b40-001a4bb12848</ИдКлассификатора>
    		<ТипыЦен>
    			<ТипЦены>
    				<Ид>995aa9b6-19f8-11df-bb4e-001a4bb12848</Ид>
    				<Наименование>Розничные</Наименование>
    				<Валюта>руб.</Валюта>
    				<Налог>
    					<Наименование>НДС</Наименование>
    					<УчтеноВСумме>false</УчтеноВСумме>
    				</Налог>
    			</ТипЦены>
    		</ТипыЦен>
    		<Предложения>
    			<Предложение>
    				<Ид>2b478218-df7b-11e5-baeb-00155d007103</Ид>
    				<ШтрихКод>2000000694153</ШтрихКод>
    				<Артикул>030067</Артикул>
    				<ДатаСоздания>1483228800</ДатаСоздания>
    				<Наименование>98 CM Дж. L-7061 (25-30/*6) жен.</Наименование>
    				<КоличествоВПачке>6</КоличествоВПачке>
    				<БазоваяЕдиница Код="796" НаименованиеПолное="Штука" МеждународноеСокращение="PCE">шт</БазоваяЕдиница>
    				<Цены>
    					<ХарактеристикиТовара>
    						<ХарактеристикаТовара/>
    					</ХарактеристикиТовара>
    					<Цена>
    						<Представление>2 590 руб. за шт</Представление>
    						<ИдТипаЦены>995aa9b6-19f8-11df-bb4e-001a4bb12848</ИдТипаЦены>
    						<ЦенаЗаЕдиницу>2590</ЦенаЗаЕдиницу>
    						<Валюта>руб</Валюта>
    						<Единица>шт</Единица>
    						<Коэффициент>1</Коэффициент>
    					</Цена>
    				</Цены>
    				<Количество>0</Количество>
    			</Предложение>




    Готовый код
    ситуация, что вручную обработку этого файла придется писать

    https://github.com/ArtemsWay/commerceml
    https://github.com/gillbeits/commerceml

    Я правда не пользовалмя этими решениями и работаю со штатным решением в одной из CMS — вам оно не подойдет, тк там дергаются методы ядра движка и запросы под определенную структуру БД
    Ответ написан
    Комментировать
  • Как настроить Vagrant для работы с роутингом?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    Тут сугубо проблемы с веб-сервером, нужно настройки nginx смотреть
    В Homestead по умолчанию включают все запросы на index.php кроме папок и файлов

    Вот по умолчанию настройка nginx в Homestead:
    https://github.com/laravel/homestead/blob/master/s...

    location / {
            try_files $uri $uri/ /index.php?$args;
    }
    Ответ написан
    Комментировать
  • Как зарегистрировать класс в PHP?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    Используйте Composer и через autoload подключайте нужный класс

    Слово useне подключает файл класса, оно нужно для ограничения пространства имен
    Ответ написан
    6 комментариев
  • У кого есть подборка крутых программистов PHP — блоги, каналы, соцсети?

    Maksclub
    @Maksclub Автор вопроса, куратор тега PHP
    maksfedorov.ru
    Никита Попов, автор Fast Router
    Узнал о нем из новости Symfony 4.1, в котором благодаря Никите у Symfony 4.1 ускорили роутинг в 77 раз быстрее и сделали его самым быстрым среди роутингов

    https://matthiasnoback.nl/ -- если вы читаете дайджесты на Хабре по PHP, то можно не подписываться на него -- его материалы попадают в подборку
    Ответ написан
  • Как установить mysql 5.5 и php 5.4 на ubuntu 16.04?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    Лучше делайте тестирование на виртуалке через Вагрант или через Докер-контйенеры, и не нужно вам будет софт ставить и конфликты разрешать
    Ответ написан
    4 комментария
  • Как лучше сделать ссылки с использованием mvc?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    Не совсем понял вопрос, вы имеет в виду не хардкодинг с жеским указанием куда отправлять, а динамично? Тогда ответ ниже:

    Посмотрите в сторону роутинга Aura Router с поддержкой PSR 7, у него есть метод generate(), который генерирует ссылку по названию роута и без хардкодинга
    https://vk.com/@autofay-pakety-rouitnga-na-php-s-p...

    Плохой пример:
    Обычно в шаблоне хардкодят и задают ссылку в href примерно в таком виде href="/blog/<?=$post->id?>", если вы решили /blog/ сменить на /pages/ или еще как-то, то придется все ссылки менять

    Хороший пример на основе роутинга:
    в самом роуте blog.read вы можете задавать правила для url (на /posts/ или /blog/ вести),
    а в шаблонах выводиь ссылку так, и все ссылки автоматом будут учитывать настрйоки:
    href="<?= $generator->generate('blog.read', ['id' => 42]); ?>"
    Ответ написан
    4 комментария
  • Стоит ли все хранить в SESSION, или же что-то лучше хранить в COOKIE?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    В куку можно ставить безобидные даные:
    • язык пользователя или город
    • тема (в плане дизайна)
    • какие-то метки для маркетинга (первый источник или ref-ссылка)
    • можно хранить корзину (id товаров)
    • какие-то даты
    • id пользователя (но не из БД!!! а какой-то идентификатор безобидный для статистики)
    • хранить сколько раз лайкнул на этой странице и куда кликнул
    • хранить состояние модальног окона (выдавали ему уже всплывашу или нет, чтобы не при каждой странице грухзить окно и не раздражать)
    Ответ написан
    3 комментария
  • Как получить значение из json?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    <?php
    
    $obj = json_decode($data, true);
    $return = array_values($obj['return']); // Переиндексируем все значения в массиве 
    var_dump($return[0]['status']); // Если элементов в JSON несколько, то можно циклом пройтись и достать все данные, сейчас достаю только у 1 элемента


    https://ideone.com/tv2hI8
    Ответ написан
    Комментировать
  • Почему pdo драйвер возвращает int как string?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    На уровне PDO

    'options'   => array(
                PDO::ATTR_STRINGIFY_FETCHES => false,
                PDO::ATTR_EMULATE_PREPARES => false,
    Ответ написан
  • Какой скрипт интернет магазина работает с 1С?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    Shop-Script,
    Simpla,
    Bitrix,
    OpenCart,
    Magento,
    Readyscript (лично не пробовал, но рекомендуют)

    Да любой взрослый движок, даже SAAS-решение типа Insales — все интегрируются с 1С

    (У моего директора завалялись лицензии Shop-script 7 и Bitrix),
    если нужны будут — по дешевке отдадим
    Ответ написан
  • Зачем используется две бд PostgresSQL и MongoDB/Redis?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    Реляционная БД хорошо себя показывает для целостности данных, хорошая и крепкая структура... но есть минус — когда много связей и таблицы глубокие, то приходится делать очень большые и сложны запросы, некоторые могут выполняться долго...

    Тогда делают денормализацию данных — объединяют несколько таблиц в один документ, например в документе с товаром будут сразу и варианты с ценами, и изображения и категория и комментарии, тогда при запросе этого документа по id идет 1 запрос и данные быстро отдаются.

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

    Также Редис используют для хранения в нем сессий https://habrahabr.ru/post/318836/
    Ответ написан
    8 комментариев
  • Какую роль играет PHP PDO и SQLite в "боевых" проектах?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    по PDO — все ORM в популярных фреймах работают с ней, но на прямую не нужно работать как правило
    другое дело — если работаете без фрейма и с БД, то лучше всего работать через него

    SQLite — нет, практически не используется

    Учитывая ваши предыдущие вопросы — советую разобраться раз и навсегда с подключением, это не самый сложный момент
    Ответ написан
    2 комментария