За последние 24 часа нас посетили 20527 программистов и 1106 роботов. Сейчас ищет 291 программист ...

Автозагрузчик на frontend и backend

Тема в разделе "PHP для новичков", создана пользователем Konstant1n, 23 июл 2019.

  1. Konstant1n

    Konstant1n Активный пользователь

    С нами с:
    14 авг 2017
    Сообщения:
    273
    Симпатии:
    1
    Адрес:
    Волгоград
    Всем привет!
    Помогите с автозагрузчиком composer.
    Структура сайта такая:
    backend
    common
    frontend.
    У backend и frontend свои контроллеры.
    В common общие модели и файл конфигурации.
    composer в директории common.
    что мне написать в psr-4 композитора, чтобы загрузчик был для backend и frontend отдельно, чтобы каждый свои контроллеры подключали?

    сейчас у меня так:
    PHP:
    1. "autoload": {
    2.     "psr-4": {
    3.       "common\\core\\":           "core/",
    4.       "common\\controllers\\":    "controllers/",
    5.       "common\\models\\":         "models/",
    6.       "common\\primitive\\":      "primitive/",
    7.       "backend\\core\\":          "core/",
    8.       "backend\\controllers\\":   "controllers/",
    9.       "frontend\\core\\":         "core/",
    10.       "frontend\\controllers\\":  "controllers/"
    11.     }
    12.   }
    это же неправильно?

    такая ошибка:
    Невозможно загрузить файл G:\OSPanel\domains\myblog.local\common\primitive\frontend\controllers\ControllerPage.php

    откуда вообще взялся этот common\primitive
     
    #1 Konstant1n, 23 июл 2019
    Последнее редактирование: 23 июл 2019
  2. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
    composer dumpautoload -o
     
  3. Konstant1n

    Konstant1n Активный пользователь

    С нами с:
    14 авг 2017
    Сообщения:
    273
    Симпатии:
    1
    Адрес:
    Волгоград
    это я знаю
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    я думаю ошибка не в composer.json, а в коде php.

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

    подробнее: если, к примеру у тебя такой расклад
    PHP:
    1. <?php
    2.  
    3. namespace common\primitive;
    4.  
    5. // . . .
    6. $o = new frontend\controllers\ControllerPage();
    то будет попытка создать объект класса \common\primitive\frontend\controllers\ControllerPage и автолоадер попытается обратиться к тому пути, который ты описал выше.

    вот так было бы правильней:
    PHP:
    1. $o = new \frontend\controllers\ControllerPage();
    (обрати внимание на первый "\")
    или
    PHP:
    1. use frontend\controllers\ControllerPage;
    2. // . . .
    3. $o = new ControllerPage();
     
  5. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
    У него в кстати разные неймспейсы смотрят в одни и теже директории, вопрос зачем? И почему пути не относительны composer.json? При условии что он в конце проекта
     
    mkramer нравится это.