• Ошибка 404 - почему не работает роутинг/контроллер/шаблон?

    logpol32
    @logpol32 Автор вопроса
    BoShurik, написал ответ, что помогло. Дело было в 2х файлах .htaccess.
    Но не могу понять почему без них не работает, и зачем это надо делать руками.

    В других фреймворках - движках такого не встречал. Да .htaccess, но либо они уже там есть, либо создаются как опционально, для чпу и прочих плюшек - закрыть доступ к важной папке, установить пароль , т.е. не вызывают таких сбоев, ошибок 404.
  • Ошибка 404 - почему не работает роутинг/контроллер/шаблон?

    logpol32
    @logpol32 Автор вопроса
    BoShurik, вы же ставили composer require apache-pack. Вроде ставил, но в composer.json этого пакета не нашел.
    Странно. Установил composer require symfony/apache-pack
    Файл .htaccess в папке public не появился. Надо его создавать руками? Он там должен быть?

    composer.json
    {
        "type": "project",
        "license": "proprietary",
        "minimum-stability": "dev",
        "prefer-stable": true,
        "require": {
            "php": ">=8.1",
            "ext-ctype": "*",
            "ext-iconv": "*",
            "doctrine/doctrine-bundle": "^2.7",
            "doctrine/doctrine-migrations-bundle": "^3.2",
            "doctrine/orm": "^2.13",
            "symfony/apache-pack": "^1.0",
            "symfony/asset": "6.2.*",
            "symfony/console": "6.2.*",
            "symfony/dotenv": "6.2.*",
            "symfony/flex": "^2",
            "symfony/framework-bundle": "6.2.*",
            "symfony/maker-bundle": "^1.48",
            "symfony/runtime": "6.2.*",
            "symfony/twig-bundle": "6.2.*",
            "symfony/yaml": "6.2.*",
            "twig/extra-bundle": "^2.12|^3.0",
            "twig/twig": "^2.12|^3.0"
        },
        "config": {
            "allow-plugins": {
                "symfony/flex": true,
                "symfony/runtime": true
            },
            "sort-packages": true
        },
        "autoload": {
            "psr-4": {
                "App\\": "src/"
            }
        },
        "autoload-dev": {
            "psr-4": {
                "App\\Tests\\": "tests/"
            }
        },
        "replace": {
            "symfony/polyfill-ctype": "*",
            "symfony/polyfill-iconv": "*",
            "symfony/polyfill-php72": "*",
            "symfony/polyfill-php73": "*",
            "symfony/polyfill-php74": "*",
            "symfony/polyfill-php80": "*",
            "symfony/polyfill-php81": "*"
        },
        "scripts": {
            "auto-scripts": {
                "cache:clear": "symfony-cmd",
                "assets:install %PUBLIC_DIR%": "symfony-cmd"
            },
            "post-install-cmd": [
                "@auto-scripts"
            ],
            "post-update-cmd": [
                "@auto-scripts"
            ]
        },
        "conflict": {
            "symfony/symfony": "*"
        },
        "extra": {
            "symfony": {
                "allow-contrib": false,
                "require": "6.2.*"
            }
        }
    }
  • Ошибка 404 - почему не работает роутинг/контроллер/шаблон?

    logpol32
    @logpol32 Автор вопроса
    BoShurik, .htaccess? В проекте его нет, ну пор крайней мере я не нашел.
    Вот проект - (если что весит 37 Кб).
    https://cloud.mail.ru/public/Go4V/m5X1KRUvn
  • Ошибка 404 - почему не работает роутинг/контроллер/шаблон?

    logpol32
    @logpol32 Автор вопроса
    BoShurik, нет - выводит приветственную страницу симфони по умолчанию.
  • Ошибка 404 - почему не работает роутинг/контроллер/шаблон?

    logpol32
    @logpol32 Автор вопроса
    BoShurik, думаю да. Симфони (последняя версия, компоненты и т.д.) требовал php 8.1.
    Я скачал последнюю версию OpenServer c php 8.1. Конфиги апача пхп не трогал - там всё по дефолту.
    Далее я создал тестовый контроллер. И шаблон. И всё работало.

    Сейчас откатился (гит) до версии с этим тестовым контроллером - попробовал все варианты роутинга - всё работает.

    class TestController extends AbstractController
    {
    
       
        #[Route('/', name: 'home_page')]
        function indexAction()
        {
    return $this->render('test/index.html.twig', ['a' => 12345]);
        }
    
    
    }
  • Ошибка 404 - почему не работает роутинг/контроллер/шаблон?

    logpol32
    @logpol32 Автор вопроса
    Немного не понял.
    Я смотрел как работают роуты и прописывал их разными способами.
    Сейчас у меня 1 файл yaml - это routes\framework.yaml
    его содержимое
    when@dev:
        _errors:
            resource: '@FrameworkBundle/Resources/config/routing/errors.xml'
            prefix: /_error
    
    # Комментарий.
        #index:
        #   path: /
        #  controller: App\Controller\TestController::indexAction
  • Ошибка 404 - почему не работает роутинг/контроллер/шаблон?

    logpol32
    @logpol32 Автор вопроса
    User@COMPUTER G:\Program Files\OpenServer 5.4.3\domains\symfony.local
    # php bin/console debug:router
     ---------------- -------- -------- ------ --------------------------
      Name             Method   Scheme   Host   Path
     ---------------- -------- -------- ------ --------------------------
      _preview_error   ANY      ANY      ANY    /_error/{code}.{_format}
      add_category     ANY      ANY      ANY    /category
      home_page        ANY      ANY      ANY    /
      video            ANY      ANY      ANY    /video
      add_video        ANY      ANY      ANY    /add_video
     ---------------- -------- -------- ------ --------------------------
  • Как лучше организовать архитектуру проекта?

    logpol32
    @logpol32 Автор вопроса
    Олег,
    А первое желание у вас как я понимаю было сделать одно поле цена в классе товар ?
    Да. Решил не усложнять.
    Вроде (не помню точно), в других магазинах такого деления цены нет. Возможно оно есть где то в 1С, на бумаге и т.д.
  • Как лучше организовать архитектуру проекта?

    logpol32
    @logpol32 Автор вопроса
    Дмитрий,
    можно запилить трейтами(не все любят подобное)

    Не встречал трейты в других языках. По моему, трейты нарушают кучу принципов.
  • Как подключить bootstrap через composer?

    logpol32
    @logpol32 Автор вопроса
    Сергей delphinpro,
    Бутстрап - это клиентская js/css библиотека

    Автолоадом подключаются php пакеты

    я знаю.
    К тому же при правильной настройке сервера, папка vendor

    Разумеется chmod и т.д.

    Но если композер скачал, наверно как то можно подключить.
    Вы и написали ответ - переместить в папку с chmod 755 используя команду в composer.json.

    Итого - то есть нужна css/js библиотека - не нужно использовать композер, "дороже" выйдет?
    Качаем руками или CDN. Если php - композер, автолоад.
    Так?
  • Как подключить bootstrap через composer?

    logpol32
    @logpol32 Автор вопроса
    То есть вы предлагаете прописать в composer.json команды загрузки бутстрапа и перемещения нужных файлов в отдельную публичную папку?

    Скачали все файлы бутстрапа - переместили bootstrap.min.css и bootstrap.bundle.min.js в папку css, js и т.д.
    В продакшене игнорим папку вендор/бутстрап т.к. там 17 мегабайт мусора?
    Так?

    Возможно, лучше не использовать композер, а просто скачать и подключить эти файлы руками? Так для всех проще.
  • Что не так в коде (можете сделать краткое код ревью)?

    logpol32
    @logpol32 Автор вопроса
    Vitsliputsli, Спасибо за ответ.

    Про форматирование, конечно, верно пишут

    Исправил.

    1)
    Нет ООП (а это сейчас обязательный стандарт)

    В общем и целом я разбираюсь в ООП, изучал ООП по С# и понимаю вашу претензию. Обычно её формируют как - "программист использует ООП, но пишет в процедурном стиле".
    Но ООП в скриптовых языках, как я понимаю, и есть использование статики. Во всех фреймворках очень много обращений к статическим методам. Да, иногда создают экземпляр класса.

    Мне сложно создавать объекты в языке, где срок жизни скрипта ограничен.
    реконнекты при каждом запросе

    Я не могу создать подключение к бд 1 раз и хранить ссылку на него. Скрипт завершился - память отчищена. Это не десктопное ПО, где программа работает, пока её не закрыл пользователь.

    2)
    SQL-инъекции!

    Знаю. Так и написал TODO фильтрация данных. Ну и нужны подготавливаемые запросы.

    3)
    ТТУК, если конечно вообще подразумевался mvc
    Я прочитал несколько статей по MVC и посмотрел много видео. И так до конца и не понял, что есть MVC.
    У каждого MVC - свое. У каждого модель и контроллер что то свое.
    У одних больше логики в модели, у других в контроллере. Одни не любят толстые контроллеры, другие наоборот. Реализация данного паттерна мне не до конца понятна.
    Я считаю, что Модель - это БД, вид - это шаблон, контроллер - это файл/группа файлов которые отображают данные из модели в шаблоне и изменяют состояние переданное из шаблона (пользователь кликнул по кнопке) в модели (БД).

    4) Исправил, но возник новый вопрос, который чуть позже напишу.
  • Что не так в коде (можете сделать краткое код ревью)?

    logpol32
    @logpol32 Автор вопроса
    Сергей delphinpro,
    1)
    Вы отрицаете устоявшиеся стандарты.

    Такие стандарты, скорее всего, не приму (после C# точно нет).
    Но писать по "стандартам" придется лишь потому, что так принято - в этом смысле вы правы.
    Традиционное или пиши как большинство или не работай с большинством.

    2)
    Вы не понимаете, а может и не знаете новых возможностей языка.

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

    3)
    Вы не понимаете преимуществ строгой типизации.

    Я работал c C# и Delphi. И я действительно не понимаю, зачем в PHP ввели строгую типизацию, не убрав не строгую. Обычно языки подразделяются на языки со строгой типизацией и не строгой.
    По моему мнению, строгая типизация дает лучший контроль над типами значений (например, аргументы метода), улучшает производительность за счет выделения памяти под конкретный тип данных, уменьшает количество неявных преобразований - что снижает ошибки программиста и возможную потерю точности.

    Как и писал выше - если рынок/заказчик хочет писать так (со строгой типизацией) и он платит, буду писать так.
    Любой каприз за их деньги. И в данном случае я только за такую типизацию.
    Но я пока не, что в крупных проектах так пишут. В видеороликах, мануалах от мидлов и лидов я ещё ни разу не видел использование строгой типизации.

    Ну и напоследок, сами ответьте на вопрос: при прочих равных, какое из двух тестовых будет для ревьюера привлекательнее

    Ошибку понял - большинство требует, надо писать как требует.
  • Что не так в коде (можете сделать краткое код ревью)?

    logpol32
    @logpol32 Автор вопроса
    Сергей delphinpro,
    ну хотя бы автоформатирование применить в IDE можно было?

    Можно. Работал и в шторме и в саблайме и в вс коде.
    Скажу прямо - мне стандартное форматирование режет глаз.

    Я не понимаю зачем нужны пробелы. Я вижу их как лишнее.
    В позиционирование скобок/кода относительно вложенности я не вижу особого смысла т.к. редактор и так подсвечивает парные скобки.
    А если большая вложенность (там где форматирование должно помочь), то скорее всего код некорректен, не продуман, слишком запутан.

    Я понимаю, что скорее всего без форматирования мой код забракуют, потому что так положено.
    То написал как есть.

    Недавно смотрел выступление лидов про код стайл. В некоторых компаниях нет единого стандарта и каждый программист (в плане форматирования) пишет код по своему. В результате возникали холивары - чей кодстай лучше.
    А потом они внедрили какую то софтину и теперь их код форматируется автоматически при пуше в гит.
  • Что не так в коде (можете сделать краткое код ревью)?

    logpol32
    @logpol32 Автор вопроса
    Спасибо за ответ.
    1) PSR. Названия функций. - да это так, не соответствует стандарту.
    Но от стандарта PSR отошли многие крупные компании. В каждой фирме свой стандарт оформления кода.
    Имена методов я написал в CamelCase C# стиле, что иногда делают многие разработчики.
    Неужели это так важно для ревьювера - только PSR и всё?

    2)
    Отступы, а точнее их отсутствие. Самому то глаз не режет это?
    Если честно - нет.
    Я знаю, что стандарт PSR предполагает 4 отступа, перенос скобки и т.д.

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

    3)
    Мешанина из кода. Всех интересует знаешь и понимаешь ли ты что такое патерны и mvc а тут им и не пахнет даже.

    Почему? Шаблоны есть. Модель в виде БД есть. Контроллеры для работы с БД и вывода в шаблон есть.
    Всё есть.
  • Что не так в коде (можете сделать краткое код ревью)?

    logpol32
    @logpol32 Автор вопроса
    Спасибо за ответ.
    1) Про php 7.0 что вы имели ввиду? Новые версии регулярно выходят и использовать их фишки только ради современности...
    2) "строгий стиль php (с типами данных) - это обязаловка" - я пока нигде такого не видел. Сейчас открыл YII2 - нет строгой типизации данных. Да и зачем в PHP это?
  • Где лучше опубликовать инди игру российскому разработчику?

    logpol32
    @logpol32 Автор вопроса
    Не вариант. Даже у AAA игр мало шансов, не говоря про индюшатину.
  • Как исправить ошибку Object reference not set to an instance?

    logpol32
    @logpol32 Автор вопроса
    freeExec, IDE должна корректно отображать имена, свойства и методы объектов.
  • Как исправить ошибку Object reference not set to an instance?

    logpol32
    @logpol32 Автор вопроса
    GavriKos, freeExec, всё понял, пошел пить валерьянку.

    Почему в Unity имена объектов (открываем маны по любому хорошему ЯП высокого уровня Java С# да хоть PHP Delphi) могут содержать...пробел? Скрин выше.
    Text (Legacy) Чудесно.

    Почему я не понял, что это объект (вон же он в иерархии)? Потому что у меня автоматом с любой IDE Qt/Delphi/VS что текст на кнопке - это её свойство.
    То есть image у кнопки компонент, а вот текст - вложенный объект. Удаляем image и всё можно сделать наоборот. Не уживаются вместе, хотя в любой IDE никаких проблем.

    Если, возможно обращение по имени без пробела, почему отображается с пробелом?
    Аналогичный вопрос по компонентам, например - Rigidbody 2D. Как к нему обратиться?
    rb = GetComponent();? Синтаксическая ошибка. Пробел то недопустим.
    Rigidbody2D - но в редакторе раздельно...да ладно и так сойдет, че придираешься?

    А компонент text? К нему как обратиться?
    _text.text=questions._Question._Question;
    А почему text? В редакторе же
    633a93510caaa054206903.jpeg
    Так надо _text.Text - ошибка. Почему? А вот!