Uncaught Error: Class not found

D
На сайте с 28.06.2008
Offline
1101
472

Решил переписать постепенно свои сайты на Джумле на свой движок. Опыта в этом ноль, но когда это кого-то останавливало? )))

В общем написал автозагрузку классов, роутинг, вьюшки для статей,  регистрацию/авторизацию - такой классический MVC.

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

В общем с выводом статей проблем не возникло. Перенес шаблон одного из сайтов, базу его статей - вроде все отлично. Даже скорость генерации php кода быстрее в 3.6 раза чем у Джумлы.

Пошел я кодить дальше, дошел до переноса комментариев. На удивление тоже все перенес и все работает, комменты под статьями показываются.

Иду дальше, нужно писать модерацию комментов. Она у меня двух типов (из админки, до нее пока не дошел) из фронта, доступная для админа.

Вот тут я и встрял.

Вывел я значит иконки (ссылки) позволяющее редактировать, удалять коммент и т.п. Далее в дело вступает jquery. Решил тестировать на методе удаления коммента. 

Перенес этот метот (remove) в модель комментов, неймспейс

use Models\Comments\Comments;

И вот дальше я не знаю, что делать. На какой файл правильно слать POST запрос для вызова этого метода?

Ради теста я создал файл moderation.php

use Models\Comments\Comments;

ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);

if(!empty($_POST['view']=='moderation')){
    $comments = new Comments();
    if($_POST['task']=='remove'){
        $comments::remove($_POST['item_id']);
        //Comments::remove($_POST['item_id']);
    }
}

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

Uncaught Error: Class 'Models\Comments\Comments' not found

Я уже по всякому пробовал вызывать этот класс, и неймспейс убирал, тупо инклюдил нужный класс и через new пытался - все равно.

Два вопроса:

1. Как вообще правильно организовывать взаимодействие с POST запросами в MVC?

2. Что не так конкретно в моем случае? Почему ошибка?

W1
На сайте с 22.01.2021
Offline
284
#1
Dram :
Что не так конкретно в моем случае? Почему ошибка?

Не подключен файл с классом.

Мой форум - https://webinfo.guru –Там я всегда на связи
D
На сайте с 28.06.2008
Offline
1101
#2
webinfo #:

Не подключен файл с классом.

Ну это банальщину я то понял. Мне непонятно почему он не подключен, use прописан верно

<?php
namespace Services;
use Models\Comments\Comments;

ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);

if(!empty($_POST['view']=='moderation')){
    if($_POST['task']=='remove'){
        Comments::remove($_POST['item_id']);
    }
}
<br />
<b>Fatal error</b>:  Uncaught Error: Class 'Models\Comments\Comments' not found in /var/www/com/Services/moderation.php:11
Stack trace:
#0 {main}
  thrown in <b>/var/www/com/Services/moderation.php</b> on line <b>11</b><br />

мои мысли такие - так как я обращаюсь к файлу moderation.php напрямую, то автозагрузка не работает и класс не загружается.

Но я пробовал инклюдить его напрямую - результат тот же.

Может обработку POST запросов нужно перенести в индекс пхп ниже автозагрузки и кидать запросы в корневой index.php?

W1
На сайте с 22.01.2021
Offline
284
#3
Dram #:
Ну это банальщину я то понял.

Значит, не понял.  Банальщина заключается в том, что файл надо подключать.

Dram #:
Мне непонятно почему он не подключен, use прописан верно

При чём тут use?

W1
На сайте с 22.01.2021
Offline
284
#4
Dram #:
так как я обращаюсь к файлу moderation.php напрямую, то автозагрузка не работает

Откуда PHP узнает про автозагрузку?

D
На сайте с 28.06.2008
Offline
1101
#5
А как все таки правильно обрабатывать пост запросы в  MVC проектах?
D
На сайте с 28.06.2008
Offline
1101
#6

Я кажется понял - а нет разницы, гет или пост запросы. Вероятно нужно так же обрабатывать из в роутере и кидать на нужный контроллер и там уже с ними работать. Да! сейчас буду пробовать.

P.S. да, так заработало!

lutskboy
На сайте с 22.11.2013
Offline
171
#7
может стоило бы использовать какой то микрофреймворк? slimframework , flightphp ...
D
На сайте с 28.06.2008
Offline
1101
#8
lutskboy #:
может стоило бы использовать какой то микрофреймворк? slimframework , flightphp ...

не, в этом и суть - пройти все этапы самому, набраться опыта.

W1
На сайте с 22.01.2021
Offline
284
#9
Dram #:

не, в этом и суть - пройти все этапы самому, набраться опыта.

Лет за пять наберёшься.

E
На сайте с 01.10.2017
Offline
94
#10
Dram #:
Я кажется понял - а нет разницы, гет или пост запросы.

Правильно, если речь об обработке. Более того, лучше не использовать отдельные адреса для обработки POST-запросов (и др.). Т.е. физически можно использовать один маршрут для одного формата адресов и разных методов запроса. Основные стратегии, которые могут быть реализованы в одном и том же маршрутизаторе для одного формата адресов: 1) использовать общий обработчик для разных методов, "от GET" или специальный; 2) использовать отдельные обработчики для предопределенных методов, а для "неопределенных" - специальный или "системный", который бы сообщал, что "метод не поддерживается" (для этого есть специальный HTTP-код ответа).

Можно использовать упрощенную реализацию только для GET/POST. Это связано с ограничениями браузеров, когда не используется AJAX, и самого PHP. Без специальных расширений PHP, например, не различает PUT- и PATCH-параметры.

Домены на продажу: https://p20.ru/collection/domains-for-sale

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий