Ответы пользователя по тегу PHP
  • Как правильно реализовать автозагрузку в PHP, не жертвуя использованием use?

    php666
    @php666
    PHP-макака
    Переформулируй свой вопрос.
    Ничего не понятно.
    Автозагрузка и пространства имен никак не связаны, в чем конкретно затык?
    Что значит
    Я не могу использовать use, что меня сильно напрягает
    Ответ написан
    5 комментариев
  • Как правильно сделать аутентификацию пользователя?

    php666
    @php666
    PHP-макака
    аутентификация - это не сфера класса пользователь
    аутентификация - это сфера класса Authorization (или как хотите его назовите)

    авторизация:
    $auth = new Authorization(/* передаем объект запроса или _REQUEST */);
    if ($auth->processAuthorization('login', 'password') {  // set cookies/sessions and redirect
    // redirect to other
    }


    аутентификация:
    $auth = new Authorization(/* передаем объект запроса или _REQUEST */);
    $current_user = $auth->processAuthentication(); // или null если не аутентифицировались
    Ответ написан
  • Автозагрузка обязывает указывать namespace у всех классов?

    php666
    @php666
    PHP-макака
    1) С точки стандартов программирования, насколько правильно указывать у каждого класса namespace?
    да, это правильно. Один файл, один класс, который должен лежать в определенном пространстве имен.

    2) Какой подход для использования spl_autoload_register из двух перечисленных является более правильным?
    Второй. Ибо это стандарт. "Вызывать несколько раз, в качестве аргумента указав функции, подключающие классы из разных директорий" - это когда у тебя мешанина из кода и ты пытаешься всё это натянуть на современные реалии.

    Сейчас дефакто композер стандарт, не изобретай велосипед, не стоит заморачиваться на то, что само по себе практически не используется (spl_autoload_register) в проектах.

    1. Возьми композер (у меня под виндой phar работает, если запускать через php), инициализируй его у себя в проекте:
    php ../composer.phar init

    2. Создай в корне директорию в app с именем Test - это будет пространство имен App\Test, туда положи файл Test.php, в котором объяви класс Test с указанием пространства имен namespace App\Test;

    3. В файле composer.json допиши:
    {
    .....
        "autoload": {
            "psr-4": {
                "App\\": ["app/"]
            }
        }
    }

    где app - будет весь код твоего приложения, те твоих чудо-классов.
    Запусти php ../composer.phar dump-autoload

    3. Подключи лишь одну строку: require('./vendor/autoload.php');в файл индекса или в те файлы, где нужны классы с автоподгрузкой.

    4. Должно получиться это:
    5ea45cd48bcdf580929185.jpeg
    Ответ написан
    1 комментарий
  • Загрузка изображения перед его загрузкой. Как это делают?

    php666
    @php666
    PHP-макака
    Я так делал.

    Рисуется скрытый фрейм:
    <iframe width="0" height="0" name="iframe"></iframe>

    Рисуется форма ПОСЛЕ основной формы поста:
    Форма для загрузки изображений с кнопкой выбора файла:
     <form action="/thumbnail.php" method="post" enctype="multipart/form-data" target="iframe">
         <input type="file" name="file" id="file" />
     </form>


    При выборке картинки срабатывает событие submit и грузит её в скрытый фрейм на /thumbnail.php.
    thumbnail.php преобразовывает изображение, сохраняет на ФС, записывает кое-что в таблицу (см далее), после чего отдает путь к превью, JS из родительского окна браузера рисует блок изображения с URL этого превью.
    Рисуется в основной форме поста hidden поле вида
    <input type="hidden" name="thumbnail[]" value="123">

    где 123 - ID картинки, которую мы положили уже на сервер и записали в таблицу вида
    id | id_post | file_name | file_date
    получается что-то вроде записи
    123 | null | file.jpeg | 20-02-2020
    при посте самой формы мы делаем update, пробегаемся по массиву thumbnail из POST и у каждой записи обновляем id_post на тот, что получили в результате сохранения поста:
    update images set id_post = 1 where id = 123

    крон ходит раз в 15 минут и убивает все картинки, где id_post is null и file_date < now()-1 час
    Ответ написан
    1 комментарий
  • Cms или фреймворк?

    php666
    @php666
    PHP-макака
    Пошел на курсы backend разработки PHP
    значит, знаний ноль
    в частности упор на laravel
    все равно, что солдату из 18 века дать управлять танком Т90 хотя бы без образования средней школы и ПТУ
    структура ужасная, разобраться сложно и нет нормальной документации
    скорее всего, это твое субъективное мнение. ты увидел реальный код и испугался.
    найти работу на фреймворке
    стесняюсь спросить, а кому ты нужен на современный серьезный проект с нулевым опытом и знаниями?

    Ты посиди годика 2-3 на чудовищном коде 20-и летней давности, научись подводным камням языка, набей руку, тогда, возможно, попадешь и на фреймворк.

    Это тебе сейчас кажется, что фреймворк - это легко. На деле же, нужно знать и понимать очень много. Начиная с того, что нужно как рыба в воде плавать в мире ооп и кончая хотя бы минимальным пониманием, как фреймворки работают.
    Ответ написан
  • Можете привести пример, когда использовать private, а когда protected?

    php666
    @php666
    PHP-макака
    Мамкины ответчики, написавшие про то, что везде должен быть private, умных книжек не читали, кроме сухой теории и что-то своё, судя по всему, не разрабатывали.

    Класс почти ВСЕГДА должен иметь protected свойства. Ибо они ничем не отличаются от private, но позволяют использовать свойства в классах-наследниках, которые очень часто возникают. И что бы не переписывать код, лучше всегда использовать protected.

    Ситуация, когда действительно нужен private-метод или свойство - очень редкое явление.
    Ответ написан
    4 комментария
  • Правильно ли так делать?

    php666
    @php666
    PHP-макака
    как правило подобные решения неизбежно напарываются на кучу нюансов.
    лучшее решение - нажал кнопку - появилась форма с кнопкой сохранения. сохранил эту форму через аякс, проставил необходимые ID в необходимые поля. еще раз кнопку нажал - еще одна форма.

    5e90e959b998e147039742.jpeg

    а то, что у тебя неизбежно выльется в чудовищьный говнокод.
    Ответ написан
    Комментировать
  • MVC, ООП - какие должны быть сущности и связи, для такой задачи?

    php666
    @php666
    PHP-макака
    я только изучаю mvc
    ларавел возьми и изучай, а то тут сейчас тебе насоветовали отсебятины, в которой черт ногу сломит
    Ответ написан
    Комментировать
  • Что такое mvc-паттерн на самом деле?

    php666
    @php666
    PHP-макака
    Поставь на базе фреймворка Laravel это решение - laravel-boilerplate.com
    Это каркас приложения с некоторым готовыми модулями, легче понимать будет по уже написанному коду модулей. У нас коллеги, которые с Битриксом всю жизнь работали и про MVC ничего не знали, за неделю принцип поняли, опираясь на примеры кода.

    Что бы понимать MVC, надо понимать суть ООП. Для понимания сути ООП надо читать соответсвующую литературу. Это важно. Нужно научиться мыслить объектами, забыть как страшный сон всё, что ты знал до этого и заново учиться писать код.

    Что бы понимать, что такое разделение системы на слои, надо читать это (начни сразу с части 1, главы 1).

    Ну и на, мою статью на более "человеческом" варианте понимания МВС.
    Ответ написан
    9 комментариев
  • Как вставить foreach внутри переменной содержащей html тэги?

    php666
    @php666
    PHP-макака
    вынести этот код в отдельный файл и делать его include где надо - самый правильный вариант
    Ответ написан
  • Как правильно запрашивать данные к mysql?

    php666
    @php666
    PHP-макака
    Используй мою библиотеку лучше!
    Ответ написан
    Комментировать
  • Какой функционал на php написать для развития и портфолио?

    php666
    @php666
    PHP-макака
    К нам недавно приходил человек, который пишет на Ларавел, но который НЕ знает что такое абстрактный класс, SOLID, PSR.

    Современные технологии в пхп очень сильно шагнули вперед и, по факту, даже человек без теоретической базы может писать на фреймворке. Я бы порекомендовал Ларавел как фреймворк, но с обязательным чтением материала по ООП. Это Гради Буч и книга Мартина Фаулера по шаблонам проектирования. Если ты поймешь теоретическую базу + умение писать на современном фреймворке - это будет здорово.

    Городить свои велосипеды смысла не имеет.
    Ответ написан
  • Как исполнить код взятый из базы?

    php666
    @php666
    PHP-макака
    но идея через админку управлять шаблонами
    плохая во всех смыслах идея
    все, что тебе сейчас нужно - отойти от компа и выкинуть из головы то, что ты там напридумывал и начать всё заново.

    1. шаблоны - неотъемлемая часть программного кода, которая не должна управляться не через какую "админку".
    2. код в БД хранить не нужно, никогда.

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

    php666
    @php666
    PHP-макака
    Как реализовать такую архитектуру?
    это не "архитектура", а жуткий говнокод, за который надо быть по рукам или вообще уволить.
    Ответ написан
    3 комментария
  • Правильно ли выбрасывать исключения в бизнес логике?

    php666
    @php666
    PHP-макака
    Нет, это плохая практика.

    Исключительная ситуация на то и исключительная. Это ошибка запроса, нет коннекта к БД или отсутствие записи, которая, как мы уверены, должна существовать и тд. Это событие, после которого работа кода НЕВОЗМОЖНА.

    Оборачивая в исключения бизнес-логику ты расписываешься в кривой архитектуре. Валидация - это отдельный слой, который не должен давать никаких исключений, это штатный механизм системы, который должен отдать корректный ответ клиентскому коду, который его использует.
    Ответ написан
    3 комментария
  • Можно ли чем то заменить mysqli_num_rows()?

    php666
    @php666
    PHP-макака
    Спрашивать зачем это надо не нужно.
    а давай мы все-же спросим. И ты опишешь задачу.
    mysqli_num_rows является лишь показателем того, сколько запрос на выборку возвратил рядов
    заменять её не надо
    надо просто описать, что ты хочешь сделать

    есть подозрение, что тебе нужно что-то типа SQL_CALC_FOUND_ROWS
    Ответ написан
  • Изучал веб программирование. Вопрос внутри?

    php666
    @php666
    PHP-макака
    Скажите мне,пожалуйста, какой уже у меня уровень владения php
    выложи код на гитхаб и покажи. Написать сайт на пхп в 2020, когда море информации и мануал полностью на русском - не шибко сложная задача, с которой справится любой обучающийся с интеллектом чуть выше, чем у хлебушка.

    Задача программиста - писать код, который может понимать не только интерпретатор (это легко), но и человек, который этот код будет поддерживать и расширять. А это куда более сложная задача.
    Ответ написан
    Комментировать
  • Возможно ли переопределить статический метод?

    php666
    @php666
    PHP-макака
    если возникают такие вопросы, то это лишь признак очень плохой архитектуры кода
    в современном пхп ооп реализовано на достаточном уровне, что бы писать красивый и понятный код
    Ответ написан
    Комментировать
  • Как создавать домены на одной системе сайтов?

    php666
    @php666
    PHP-макака
    Если система изначально не проектировалась под подобные требования, то самое простое решение - смотреть какой домен запрошен и в зависимости от домена использовать свою БД и свои хранилища. Код будет везде один и тот же.
    Ответ написан
    Комментировать
  • Какой способ хранения предопределеных маршрутов выбрать для рутера?

    php666
    @php666
    PHP-макака
    какой из них лучше выбрать и почему?

    файл
    нет ни одной причины хранить в БД
    Ответ написан
    Комментировать