Composer 自动加载文件不起作用

2023-12-19

我的自动加载规范如下

  "autoload" : {
        "psr-4" : {
            "MyMVC\\" : "app/"
        },
        "classmap": [
            "app/Controllers",
            "app/Helpers"
        ],
        "files": ["app/routes.php"]
    },

routes.php 文件的内容是:

<?php
use MyMVC\Core\Route;

$route = new Route;
$route->add('/', 'HomeController@index');
$route->add('about', 'AboutController@index');
$route->add('contact', 'ContactController@index');

现在在我的app/init.php我正在尝试使用$route对象但它给了我错误

Notice: Undefined variable: route in /var/www/html/mymvc/app/init.php on line 29

这是我尝试使用的方法$route object.

/**
 * Constructor
 * Bootstrap our application based on the configurations provided
 */
public function __construct()
{
    // require 'app/routes.php` This will work fine but it should be autoloaded
    var_dump($route);
    exit;
}

我也运行了命令composer dump-autoload


自动加载在这里不起作用。 PHP 只能自动加载类。您的期望是app/routes.php将不可能自动加载,因为该文件不包含类声明,并且您无法使用以前未知的类来触发它的执行。

确实,当您包含时,Composer 将执行该文件一次vendor/autoload.php- 但是,这确实是您的软件的不良行为。不要使用“文件”自动加载来包含配置文件。请注意在库中使用时可能会对性能产生影响。您应该完全避免使用它,它旨在用于无法正常工作的遗留代码。

另一方面,你的架构被破坏了。您不应该编写一个仅通过访问应该在其他地方初始化的变量来“神奇地”了解配置的类。一个好的模式是将配置作为参数传递给构造函数:

public function __construct ($routes)
{
    $this->routes = $routes;
}

创建此类的代码部分应该从某处获取配置并将其作为参数传递。这个概念称为控制反转或依赖注入:类不会调用它们需要使用的其他类,它们会请求它们并将它们作为参数获取。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Composer 自动加载文件不起作用 的相关文章

  • SQLite适合并发读吗?

    在没有锁定的情况下 SQLite 数据库的性能是否能达到每秒 50 次读取左右 我正在尝试确定它是否可以在不会经常 写入 的 PHP 网站上使用 它主要是从一小部分表中读取相同的数据 没问题 并发读 写实际上会被 SQLite 序列化 所以
  • PHP 中的随机排列对象

    如何在 PHP 中对对象进行排序 我试过shuffle 但这需要一个数组 Warning shuffle expects parameter 1 to be array object given in var www index php o
  • 如何在 Laravel 5.3 中使用标头参数调用 SOAP wsdl?

    I use artisaninweb laravel soap包来运行 SOAP wsdl 文件 为了解析 WSDL 文件 我需要将其与标头参数一起调用 所以换句话来说 首先我需要设置标头参数 然后将其与此参数一起调用 在我的 larave
  • whereHas 之后的 where 查询在 Laravel 5.4 中无法正常工作

    就我而言 我有channels与多对多关系的表类别 table 我想获取他们的频道类别包含像doing这样的动态值LIKE查询每个类别的标题 但我需要检查 a 的另一列channel通过 where 子句 这是一个channel结构 id
  • 我可以为我的记录器使用静态类吗?

    最近我被告知静态类 方法是邪恶的 以我的 Logger 类为例 class Logger private static logs array public static function add msg self logs msg publ
  • 为什么 Laravel 即使在本地环境也会重定向到 https?

    我正在开发 Laravel 5 5 版本 我有一个需要域才能执行的应用程序 这就是为什么 我在我的中添加了以下条目 etc hosts文件 以便我可以使用以下域打开我的应用程序仪表板 应用程序 dev or api application
  • php登录会话登录变量

    我正在学习 php 并已报名参加课程 我的用户登录信息显示如下 我的问题是登录时是否必须在会话中选择我想要的所有字段 我不能只使用 选择电子邮件 并按此拉出所有行 或者我必须在登录时选择所有行吗 例如 将该 uid uid 用于该会话 它是
  • 查找定义类的 PHP 文件(在运行时)

    PHP 中是否有任何反射 内省 魔法可以让您找到定义特定类 或函数 的 PHP 文件 换句话说 我有一个 PHP 类的名称 或者一个实例化对象的名称 我想把这个传递给某物 函数 反射类等 将返回定义该类的文件系统路径 path to cla
  • Magento - 将媒体库属性添加到产品平板中

    如何将 media gallery 属性类型添加到产品平面表中 以便可以在产品列表中使用它 可以通过将 用于产品列表 定义为 是 来添加它们 完成此操作后 您将需要重新索引产品平面 编辑 请参阅解决方案以获取最终答案 Source 我可以向
  • Codeigniter 未连接到 SQL Server

    我正在尝试使用 CodeIgniter 连接到 SQL 服务器 如果我使用 sqlsrv 驱动程序 我会收到致命错误消息 如果我使用 odbc 驱动程序 我会收到 无法使用提供的设置连接到数据库服务器 错误消息 有谁知道如何解决这个问题 我
  • 使用 Wikipedia API 查找文章的主要类别

    我有一个文章列表 我想找到每篇文章的主要类别 维基百科在这里列出了它的主要类别 http en wikipedia org wiki Portal Contents Categories http en wikipedia org wiki
  • 你能帮助我更好地理解 PHP 类吗?

    我是一个学习速度很慢的人 我想在编码方面 我已经学习 PHP 几年了 但我仍然不理解类 所以是时候我付出一些努力 至少更好地理解它们了 我凡事都使用函数 人们经常在这里对我发表评论 他们不敢相信我有一个社交网站 而且我不使用课程 我真的不明
  • 仅当客户尚未使用优惠券时,才将优惠券添加到处理订单电子邮件中

    我发现了这个片段 它在订单邮件中添加了优惠券 我想仅当客户未使用任何优惠券时才将其显示在处理订单邮件中 add action woocommerce email before order table add content 20 funct
  • 将 SQL 查询的 SELECT 子句解析为 PHP 数组

    这更多的是用于分析 PHP 中的查询before它被发送到服务器 我这样做的原因非常复杂 所以我不想深究其原因 在 PHP 中 我需要将字段选择存储到 PHP 数组中 以这个查询为例 SELECT user id username DATE
  • PHP curl 获取标头参数

    我将curl 与PHP 结合使用来获取API 调用的标头响应 这是我的代码 curl curl init curl setopt curl CURLOPT URL http localapi com v1 users curl setopt
  • 尝试加载 php_oci8.dll 时 PHP 启动时出现警告

    我正在使用 XAMPP 并尝试为 sql 配置 Oracle 连接 我取消了该行的注释extension php oci8 dll一开始出现错误 缺少oci dll 但后来我从Oracle网页下载了instantclient 我尝试过版本
  • 如何从 PHP 中的两个不同数组获取公共值

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有两个带有一些用户 ID 的数组 array1 array 5 26 38 42 array2 array 15 36 38 42 我需
  • PHP 会话混乱

    好吧 我已经很困惑了 我有一个存储在会话中的对象 我可以向该对象添加项目 到目前为止非常简单 我像这样初始化对象 template new Template mysqli SESSION template serialize templat
  • 数组初始化中的正确缩进,PDT/Zend Studio

    我在代码中使用以下样式的数组初始化 a array one gt 123 two gt 456 但在这种情况下 PDT Zend Studio 无法正常工作 按 Return 键后 它将光标置于 a 下方 在我的示例中 并忽略缩进 如果数组
  • Laravel 搜索路由和控制器

    我正在构建我的第一个基本 Laravel Web 应用程序 在学习了一些教程之后 这是我自己修改的第一个应用程序 我在路由到控制器然后获取正确的网址时遇到了一些麻烦 理想情况下 此时我应该只有两条路线 and user 在主页上 您可以通过

随机推荐

  • 重新启动 Kafka Connect S3 Sink 任务丢失位置,完全重写所有内容

    重新启动 Kafka Connect S3 接收器任务后 它会从主题的开头开始一直写入 并写入旧记录的重复副本 换句话说 Kafka Connect 似乎失去了它的地位 所以 我想象Kafka Connect将当前的偏移位置信息存储在内部c
  • 在 j2me 中使用 WSDL 文件的存根文件

    是否可以使用 WSDL 文件生成存根文件 我知道如何使用 j2me 中的 wscompiler 生成存根文件 我有一个 wsdl 文件 是否可以使用它创建存根文件 我在 j2me 应用程序中使用这些存根文件 有多种方法可以生成存根文件 Us
  • 有没有办法在活动之间传递函数引用?

    有没有一种方法可以在 Kotlin 和 Android 中捆绑函数引用 以便可以从其他片段调用这些函数 例如 我的片段工厂方法如下所示 fun newInstance tryAgainFunction gt Unit TimeOutHand
  • 如何以编程方式在 Watch 上撰写消息?

    如何将消息应用程序打开到撰写屏幕 并在消息正文中预加载特定文本 Benjy的答案几乎是正确的 https stackoverflow com a 34459852 4151918 但有一个问题 Since urlSafeBody未解包 字符
  • 为什么将一个小浮点数添加到一个大浮点数中只会删除小浮点数?

    假设我有 float a 3 gdb p f a 3 float b 299792458 gdb p f b 299792448 then float sum a b gdb p f sum 299792448 我认为这与尾数的移动有关 有
  • 打开已保存的工作簿会导致当前工作簿引发异常

    我正在尝试打开保存的 Excel 工作簿 同时保留对当前工作簿的引用 问题是 一旦我打开保存的工作簿 原始工作簿就会在访问时引发异常 这是要演示的代码片段 我将其放入功能区按钮的事件处理程序中以对其进行测试 try string workb
  • nginx 反向代理可访问多个 docker 容器

    我想在一台主机虚拟机上运行多个 docker 容器 这些容器只能通过一个域访问 我想使用请求 url 来区分容器 为了实现这一点 我尝试将 nginx 服务器设置为反向代理 并在容器中运行它 同时侦听端口 80 假设我有两个容器在端口 30
  • Spring Boot 中的 DTO 验证不起作用

    我有一个带有 POST 方法的控制器 RestController RequestMapping value creditDetails produces MediaType APPLICATION JSON VALUE RequiredA
  • jQuery DataTable 无法在 asp.net mvc 4 中工作

    我一直在尝试各种方法将 jQuery DataTables 插入到我的 mvc 应用程序中 看完之后http datatables net blog Microsoft CDN http datatables net blog Micros
  • 路由在 webpack + React 项目中不起作用

    我正在使用 webpack React React router typescript 构建一个应用程序 但我被路由困住了 我有两条路由 默认的 和 test 无论我做什么 只有默认的是reach 我做了很多研究 发现很多人都有同样的问题
  • 如何在 Java 中创建对象列表

    我有一个名为 MarkerCustom class 的类文件 MarkerCustom 有一个构造函数 它采用三个不同类型的变量 public MarkerCustom int myInt String myString BitmapDat
  • 在pygame中发生一定次数的碰撞后更改背景

    我正在尝试切换背景only如果检测到一定数量的碰撞 或撞击气球 屏幕上的碰撞是一把枪和 7 个气球之间的碰撞 注意 碰撞效果非常好 目前 出现了 7 个气球 每次我击中气球时 它都会切换背景 应该发生的情况是 当您在第一个背景上击中 7 个
  • TouchJSON,处理 NSNull

    你好 我正在使用 TouchJSON 反序列化一些 JSON 我过去一直在使用它 并且在那些情况下我手动处理 NSNull 的出现 我认为作者也必须处理这个问题 所以我再次这样做只会产生开销 然后我在文档中找到了这个 避免输出中的 NSNu
  • 在 java 中读取巨大的 Zip 文件 - 内存不足错误

    我正在使用 java 读取 ZIP 文件 如下所示 Enumeration
  • C# 中如何删除数组中的元素

    假设我有这个数组 int numbers 1 3 4 9 2 如何通过 名称 删除元素 比如说4号 Even ArrayList没帮忙删除 string strNumbers 1 3 4 9 2 ArrayList numbers new
  • 当我拥有有效的 Azure AD JWT 令牌时获取 AzureAppProxyAccessCookie

    一些背景信息 我正在为某些 API 开发双因素身份验证解决方案 Azure AD 编码的 API 密钥 我能够以编程方式获取有效的访问令牌 以用作标头请求上的授权承载令牌 不幸的是 API 期望 2 编码的 api 密钥通过授权字段传递 因
  • 获取实例名称

    有没有办法获取我们在类方法中创建的特定类的实例的名称 这就是我正在尝试做的 module MyObjectStore values temp define method add check attribute do method args
  • Geotools 距离计算失败,几个经纬度点没有收敛异常

    我有很多点使 getOrthodromicDistance 方法在 geotools lib 中失败并出现异常 而这些点是有效的经纬度点 抛出异常的点 纬度 经度 val p1 5 318765 75 786109 val p2 6 329
  • 奇怪的 jQuery XML 问题

    我有一个 XML 文档中的引号列表 每个引用都这样包装
  • Composer 自动加载文件不起作用

    我的自动加载规范如下 autoload psr 4 MyMVC app classmap app Controllers app Helpers files app routes php routes php 文件的内容是