#php #composer-php
#php #композитор-php
Вопрос:
Я пытаюсь создать файл, который вы можете выполнить из командной строки для создания таблиц в базе данных. Проблема в том, что этот файл использует класс из другого пространства имен, поэтому, когда я пытаюсь запустить php migrations.php
, я получаю Fatal error: Uncaught Error: Class "CoreDatabaseDatabase" not found in C:UsersuserDesktopappmigrations.php:6
.
Я использую автозагрузчик composer, и у меня нет проблем с другими файлами — это происходит только тогда, когда я пытаюсь выполнить указанный файл из командной строки.
Я могу решить эту проблему, потребовав файл, содержащий используемый класс, но затем я получаю ту же ошибку только в другом файле, поскольку этот другой файл также использует классы из разных пространств имен.
migrations.php
<?php
use CoreDatabaseDatabase;
Database::query("CREATE TABLE real_estates(
id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
city_id INT(11) NOT NULL,
area INT(11) NOT NULL,
price INT(11) NOT NULL,
description TEXT NOT NULL,
CONSTRAINT `fk_real_estate_city`
FOREIGN KEY (city_id) REFERENCES cities (id)
ON DELETE RESTRICT
ON UPDATE RESTRICT
)");
Database::query("CREATE TABLE cities(
id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL
)");
composer.json
{
"autoload": {
"classmap": [
"./"
]
},
"require": {
"ext-pdo": "*"
}
}
Комментарии:
1. Скорее всего, вам нужно написать дополнительный автозагрузчик для пользовательских пространств имен. Необязательно, если это один внешний класс, просто перейдите к
require_once()
нему.2. Где именно вы используете автозагрузчик?
Ответ №1:
Вам нужно require
вручную загрузить файл автозагрузки композитора, обычно это делается вашим веб-приложением.
require_once pathOfComposerAutoloadFile.php
Комментарии:
1. Ах, да. Мне действительно требовалось это в моем
index.php
, но я забыл сделать это в упомянутом файле. Спасибо!
Ответ №2:
Создать autoload.php и включите все необходимые файлы в этот файл, например….
include(__DIR__ . 'yourfile.php');
Используйте это autoload.php в вашем migration.php досье.
Теперь ты можешь бежать migration.php из URL-адреса или командной строки.