За последние 24 часа нас посетили 33784 программиста и 1746 роботов. Сейчас ищут 1265 программистов ...

MVC патерн

Тема в разделе "PHP для новичков", создана пользователем Dron-Boy, 2 авг 2018.

  1. ElisDN

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

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    Если используете Composer, то свой вызов spl_autoload_register не нужен.
     
  2. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    Да используется Composer. А как тогда?
    --- Добавлено ---
    Если я отключаю spl_autoload_register то он не находит классы по namespace
     
  3. ElisDN

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

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    Указываете ему, по какому неймспейсу из какой папки свои классы грузить:

    Код (Text):
    1. {
    2.     "require": {
    3.         ...
    4.     },
    5.     "autoload": {
    6.         "psr-4": {"App\\": "src/"}
    7.     }
    8. }
    Выполняете:

    Код (Text):
    1. composer dump-autoload
    и в папке src/Models уже создаёте:

    Код (Text):
    1. namespace App\Models;
    2.  
    3. use Illuminate\Database\Eloquent\Model;
    4.  
    5. class Task extends Model
    6. {
    7.     ...
    8. }
     
  4. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    Прописал я в composer.json
    Код (Javascript):
    1.  "autoload": {
    2.         "psr-4": {"\\": "/"}
    3.     }
    Как я понимаю ко всем namespace искать с корня папки.
    так ведь?
    поменял в моделе на


    PHP:
    1.     namespace models;
    2.     use Illuminate\Database\Eloquent\Model;
    3.     class tasks extends Model{}
    отключил автолоад в index
    теперь он просто не находит классы
    Fatal error: Class 'controllers\main' not found in /home/cpinua/site.ru/index.php on line 10
    в этом контроллере написано вот то


    PHP:
    1.   namespace controllers;
    2.     use controllers\tasks as c_tasks;
    3.     class main{
    4. }
     
  5. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Не, так прописывать не хорошо, сделай корневой namespace для своих классов, как показал @ElisDN
     
  6. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    Хорошо я пропишу ко всем namespace App в начале. а вот src это что ? как пример ?

    "psr-4": {"App\\": "src/"}
    --- Добавлено ---
    если у меня вот
    папки с контролями и моделями лежат в корне. То просто / оставить?
     
  7. ElisDN

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

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    Да.
     
  8. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    сделал все как сказал. Он пишет что не может найти класс


    Fatal error: Class 'App\controllers\main' not found in /home/cpinua/site.ru/index.php on line 10

    PHP:
    1. <?php
    2.     use App\controllers\main as main;
    3.     require_once "config/config.php";
    4.     require_once "core/views.php";
    5.     /*spl_autoload_register(function ($class) {
    6.           require_once str_replace('\\', '/', $class). '.php';
    7.     });
    8.     */
    9.     $main = new main();
    10.     $main->index();
    11. ?>

    --- Добавлено ---
    сейчас даже когда врубаю autoload он пишет что файл не найден

    Warning: require_once(App/controllers/main.php): failed to open stream: No such file or directory in /home/cpinua/site.ru/index.php on line 7
     
  9. villiwalla

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

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
    Какой загрузчик composer он там юзает, я умоляю xD
    PHP:
    1. spl_autoload_register(function ($class) {
    2.      $classPath = str_replace('\\', '/', $class). '.php';
    3.      var_dump($classPath);
    4.      exit();
    5.           //require_once str_replace('\\', '/', $class). '.php';
    6. });
    Что выдал var_dump?
     
  10. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    Вобщето composer стоит, через него ставился
    Eloquent
    --- Добавлено ---
    твой vra_dump
    string(24) "App/controllers/main.php"
     
  11. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    @Dron-Boy, так а где у тебя автолоадер композера подключается?
    --- Добавлено ---
    vendor/autoload.php всё равно руками надо включить.
     
  12. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    Ну я не знал.

    подключил его

    PHP:
    1.     require 'vendor/autoload.php';
    2.     use App\controllers\main as main;
    3.     require_once "config/config.php";
    4.     require_once "core/views.php";
    5.     /*spl_autoload_register(function ($class) {
    6.           require_once str_replace('\\', '/', $class). '.php';
    7.     });
    8.     */
    9.    
    10.     $main = new main();
    11.  
    12.     $main->index();
    попрежнему ошибка
    Fatal error: Class 'App\controllers\main' not found in /home/cpinua/site.ru/index.php on line 12
     
  13. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @Dron-Boy я вам рекомендую открыть учебник по программированию на php с самого начала и почитать. Желательно найти что нибудь для тех кто в Танке. Потому что вы пытаетесь запрыгнуть на небоскрёб не понимая, что там справа оказывается лестниц сотня штук за углом.
    Вы даже спросить не в состоянии нормально, то что у вас не получается. Так как вам другие смогут помочь.
    Есть ещё вариант полностью свой код на гит хаб или в архив и сюда. И может кому - нибудь не лень будет развернуть его у себя, и посмотреть что не так вы сделали. А по отрывкам что вы присылаете, хрен поймёшь что вы не так и где подключили.
     
    villiwalla нравится это.
  14. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    @Dron-Boy, ну если бы со мной такая неприятность произошла, я бы посмотрел, что за автолоад мне композер нагенерировал, и почему. И где его autoload ищет мои файлы, и там ли они у меня на самом деле лежат. Но это не твой случай. Так что согласен с @askanim, вернись к основам.
     
  15. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    Проблема была в пути в настройках composer я указал
    psr-4": {"App\\": "/"}
    и мне выше сказали что это верно.
    Но оказалось не так и когда я указал
    psr-4": {"App\\": ""}
    то все заработало.
     
  16. villiwalla

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

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
    Ты отдупляешь причину почему, с таким значением все заработало?
     
  17. Mitai

    Mitai Новичок

    С нами с:
    23 окт 2016
    Сообщения:
    155
    Симпатии:
    24
    Попробуйте этот канал посмотреть, еще есть psr-7 тоже очень позновательно
     
    villiwalla нравится это.