Я подхожу к программе с помощью MVC, автозагрузки и композитора... возможно, что-то ускользает от меня.
Когда я открываю / моего сайта (www.mysite.com), он должен вызвать индекс метод класса UserController, но, к сожалению, этого не происходит, и я получаю сообщение об ошибке (в строке 25 я делаю $class=new $controller() в Router.php):
Fatal error: Uncaught Error: Class "UserController" not found in /Users/denis/Herd/ctf/App/Core/Router.php on line 25
Error: Class "UserController" not found in /Users/denis/Herd/ctf/App/Core/Router.php on line 25
Я также пытался сделать $class = new $controller, но ничего не изменилось...
Если вместо этого я сделаю $class = new UserController(); все работает нормально... поэтому я предполагаю, что автозагрузка работает, записывая имя класса, а не в переменную...
Структура папок:\App\
Controllers\
UserController.php
Core\
Controller.php
Router.php
routes.php
\Public\
index.php
\composer.json
composer.json:
"autoload": {
"psr-4": {
"App\\": "App/"
}
}
index.php:
use App\Controllers\UserController;
require_once __DIR__ . '/../vendor/autoload.php';
require_once __DIR__ . '/../config.php';
App\Core\Router::route();
Router.php:
namespace App\Core;
use App\Controllers;
class Router{
public static function route(){
require __DIR__ . '/../routes.php';
$request = trim($_SERVER['REQUEST_URI']);
if (array_key_exists($request, routes)) {
$controller = routes[$request][0];
$method = routes[$request][1];
if (file_exists(BASE_PATH . '/App/Controllers/' . $controller . '.php')) {
//$a = new UserController(); $method();
exit;
}
}
}
// Not found
}
}
routes.php:
const routes = array(
'/' => array('UserController', 'index'),
...
);
UserController.php:
namespace App\Controllers;
use App\Core\Controller;
Class UserController extends Controller{
public function index(){
...
}
}
Controller.php:
namespace App\Core;
use Smarty\Smarty;
Class Controller{
public function __construct(){
session_start();
error_reporting(E_ALL);
$smarty = new Smarty();
$smarty->setTemplateDir(BASE_PATH.'/templates')
->setCompileDir(BASE_PATH.'/templates_c')
->setCacheDir(BASE_PATH.'/cache');
ini_set('display_errors', 'On');
$smarty->assign('APP_TITLE', APP_TITLE);
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... -not-found
Автозагрузка php композитора и имя класса в var (класс не найден) ⇐ Php
Кемеровские программисты php общаются здесь
-
Anonymous
1728315259
Anonymous
Я подхожу к программе с помощью MVC, автозагрузки и композитора... возможно, что-то ускользает от меня.
Когда я открываю / моего сайта (www.mysite.com), он должен вызвать индекс метод класса UserController, но, к сожалению, этого не происходит, и я получаю сообщение об ошибке (в строке 25 я делаю $class=new $controller() в Router.php):
Fatal error: Uncaught Error: Class "UserController" not found in /Users/denis/Herd/ctf/App/Core/Router.php on line 25
Error: Class "UserController" not found in /Users/denis/Herd/ctf/App/Core/Router.php on line 25
Я также пытался сделать $class = new $controller, но ничего не изменилось...
Если вместо этого я сделаю $class = new UserController(); все работает нормально... поэтому я предполагаю, что автозагрузка работает, записывая имя класса, а не в переменную...
[b]Структура папок:[/b]\App\
Controllers\
UserController.php
Core\
Controller.php
Router.php
routes.php
\Public\
index.php
\composer.json
[b]composer.json:[/b]
"autoload": {
"psr-4": {
"App\\": "App/"
}
}
[b]index.php:[/b]
use App\Controllers\UserController;
require_once __DIR__ . '/../vendor/autoload.php';
require_once __DIR__ . '/../config.php';
App\Core\Router::route();
[b]Router.php:[/b]
namespace App\Core;
use App\Controllers;
class Router{
public static function route(){
require __DIR__ . '/../routes.php';
$request = trim($_SERVER['REQUEST_URI']);
if (array_key_exists($request, routes)) {
$controller = routes[$request][0];
$method = routes[$request][1];
if (file_exists(BASE_PATH . '/App/Controllers/' . $controller . '.php')) {
//$a = new UserController(); $method();
exit;
}
}
}
// Not found
}
}
[b]routes.php:[/b]
const routes = array(
'/' => array('UserController', 'index'),
...
);
[b]UserController.php:[/b]
namespace App\Controllers;
use App\Core\Controller;
Class UserController extends Controller{
public function index(){
...
}
}
[b]Controller.php:[/b]
namespace App\Core;
use Smarty\Smarty;
Class Controller{
public function __construct(){
session_start();
error_reporting(E_ALL);
$smarty = new Smarty();
$smarty->setTemplateDir(BASE_PATH.'/templates')
->setCompileDir(BASE_PATH.'/templates_c')
->setCacheDir(BASE_PATH.'/cache');
ini_set('display_errors', 'On');
$smarty->assign('APP_TITLE', APP_TITLE);
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79062606/php-composer-autoload-and-class-name-in-var-class-not-found[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия