如何从使用来自不同命名空间的 class 的命令行执行 php 文件?
How can I execute a php file from command line which uses class from different namespace?
我正在尝试创建一个文件,您可以从命令行执行该文件以在数据库中创建表。问题是,该文件使用来自不同命名空间的 class,所以当我尝试 运行 php migrations.php
时,我得到 Fatal error: Uncaught Error: Class "Core\Database\Database" not found in C:\Users\user\Desktop\app\migrations.php:6
.
我正在使用 composer 的自动加载器,我对其他文件没有任何问题 - 只有当我尝试从命令行执行提到的文件时才会发生这种情况。
我可以通过要求包含所用 class 的文件来解决它,但是我在另一个文件中得到了同样的错误,因为另一个文件也使用了来自不同命名空间的 classes .
migrations.php
<?php
use Core\Database\Database;
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": "*"
}
}
您需要手动 require
作曲家的自动加载文件,这通常由您的网络应用程序完成。
require_once pathOfComposerAutoloadFile.php
创建一个 autoload.php 并在此文件中包含所有必需的文件,例如....
include(__DIR__ . 'yourfile.php');
在您的 migration.php 文件中使用此 autoload.php。
现在您可以从 url 或命令行 运行 migration.php。
我正在尝试创建一个文件,您可以从命令行执行该文件以在数据库中创建表。问题是,该文件使用来自不同命名空间的 class,所以当我尝试 运行 php migrations.php
时,我得到 Fatal error: Uncaught Error: Class "Core\Database\Database" not found in C:\Users\user\Desktop\app\migrations.php:6
.
我正在使用 composer 的自动加载器,我对其他文件没有任何问题 - 只有当我尝试从命令行执行提到的文件时才会发生这种情况。
我可以通过要求包含所用 class 的文件来解决它,但是我在另一个文件中得到了同样的错误,因为另一个文件也使用了来自不同命名空间的 classes .
migrations.php
<?php
use Core\Database\Database;
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": "*"
}
}
您需要手动 require
作曲家的自动加载文件,这通常由您的网络应用程序完成。
require_once pathOfComposerAutoloadFile.php
创建一个 autoload.php 并在此文件中包含所有必需的文件,例如....
include(__DIR__ . 'yourfile.php');
在您的 migration.php 文件中使用此 autoload.php。 现在您可以从 url 或命令行 运行 migration.php。