问题标签 [psr-4]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
96 浏览

php - 将 Composer Autoloader 与 PSR-4 一起使用

我正在查看示例,但我无法让我的代码正常工作。

目录结构

我的composer.json

命名空间是Company\FileExport.

供应商中的课程工作正常,但不是我的。我也跑过composer update

0 投票
1 回答
2247 浏览

namespaces - 命名空间不适用于 Codeception (Yii2)

我在 Yii2 中使用 Codeception 进行验收测试,并且无法访问我的模型,因为命名空间不适用于这些测试。

我的测试中有这个/_bootstrap.php

这在我的控制台/配置/主

这是想要的测试之一:

运行测试时出现此错误:

PHP 致命错误:在第 21 行的 /var/www/project/tests/acceptance/ListUserCest.php 中找不到类 'backend\models\User' 错误:找不到类 'backend\models\User'

请帮助我,我已经尝试了我所知道的一切

编辑

现在(在添加了 vitalik_74 推荐的行之后)我可以在测试中使用例如 \Yii 方法,但无需 Web 应用程序配置,只需控制台配置。我的意思是,我仍然不能使用 \backend\models\User 并且我也不能访问 Yii::$app->user 状态(例如,检查用户是否已登录)。

User 模型只是一个普通的 ActiveRecord 模型,带有他的 tableName、rules、attributeLabels 和一些关系方法,如 getProfile()。它适用于测试

0 投票
1 回答
169 浏览

php - PSR-4 只适用于小包装吗?

阅读PSR-4后,我认为它只适合目录很少的小包。
如果包很大,它将有很多自动加载功能可以从子包中加载。(因为我们需要先告诉函数基本目录)
考虑一个CMS或框架

  • 行政
  • 扩展
    • 框架
      • 抽象的
      • 数据库
      • 约会时间
      • 功能
      • 界面
    • 评论
    • 邮政
    • 用户

对于这个 CMS 软件包,PSR-0 是否比 PSR-4 更好?
我的目录结构好吗?
接口和抽象类应该有自己的目录吗?

0 投票
1 回答
736 浏览

php - 在 PHP 中定义路径的最佳方法

这是我的一段代码

由于我不能在类 Path 属性中使用函数甚至连接字符串(PHP 不允许这样做),所以我先定义路径,然后使用属性数组值的定义。

这样做是否正确?有没有更好的解决方案?
PS 我使用类 Path 为每个命名空间提供基本路径(我想在 PSR4 自动加载器上使用它)而且,我不只是调用自动加载器来注册命名空间,因为我认为最好将它分开。所以,如果Client想改变路径,他不需要看业务逻辑

0 投票
1 回答
1586 浏览

php - 作曲家不作曲 - 说找不到文件

我正在使用优秀的phpwkhtmltopdf库并想更新到最新版本,为此我需要使用 composer。

文件结构:

Composer.json 文件:

我正在尝试像这样使用库:

问题是我收到错误:

致命错误:在第 132 行的 /home/bookmark/public_html/ajax/action.php 中找不到类 'mikehaertl\wkhtmlto\Pdf'

这是我第一次使用作曲家,知道我做错了什么吗?

0 投票
1 回答
78 浏览

psr-4 - psr-4 对工作示例的更改不起作用

我必须实现所有来源都像这样包含在内

$instance = new \d1\d2\d3\app\MyClass();

其中 d1\d2\d3\ 指向根目录。

我已经阅读了https://getcomposer.org/doc/04-schema.md#psr-4http://www.php-fig.org/psr/psr-4/上的基础知识 。https://laracasts.com/lessons/psr-4-autoloading上的示例也适用于我。

我的问题是:一旦我根据自己的需要稍微更改下面的代码,就找不到该类了。(是的,我在 composer.json 更改后发出命令composer update。是的,我使用自我更新更新了作曲家)。

所以这有效:

作曲家.json

"autoload": { "psr-4": {
"Laracasts\\": "app/Laracasts" } }

索引.php

require_once 'vendor/autoload.php'; // According to https://laracasts.com/lessons/psr-4-autoloading $test = new \Laracasts\Repositories\BlogRepository(); $test->hello();

但这不会:

作曲家.json

"autoload": { "psr-4": {
"d1\\": "app/Laracasts" } }

索引.php

require_once 'vendor/autoload.php'; // According to https://laracasts.com/lessons/psr-4-autoloading $test = new \d1\Repositories\BlogRepository(); $test->hello();

我究竟做错了什么?

我正在使用带有 IIS 8 的 php 5.3.28。

0 投票
0 回答
1272 浏览

php - 如何为 php mvc 框架加载控制器/创建路由器

我正在为我的投资组合编写一个轻量级的 php mvc 框架,并作为我未来发展的准系统设置。我现在被卡住了,因为我试图通过作曲家使用 PSR-4 自动加载器。我了解 PSR-4 等的概念,但我想知道我应该如何处理路由。

我的文件夹结构是:

我对 php 相当熟悉,但编写自己的 mvc 框架是一项艰巨的挑战,甚至更大,因为我以前从未使用过 PSR 标准。

现在我的问题是:

  1. 我应该使用路由器吗?
  2. 如果是,那么我应该使用什么模式来完成它。

因此,在我的 index.php 中,我定义了所有常量来存储 ROOT、APP、VENDOR 等目录。然后我加载从我的 composer.json 生成的 vendor/autoload.php。在 autoload.php 之后,我通过调用以下代码加载并启动我的配置:

配置后我设置应用程序环境,然后我通过调用启动我的应用程序:

然后我的 baseController 非常非常薄:

这是我的 baseView.php:

我的 config.php:

最后是我的 composer.json 自动加载部分:

那么我应该如何实现路由 URL 请求并加载正确文件的路由器呢?

谢谢!

0 投票
1 回答
23691 浏览

composer-php - PSR-4 自动加载器致命错误:找不到类

我的项目结构如下:

我的 User.php 文件如下所示:

我的 composer.json 自动加载器是这样的:

最后我的 bootstrap.php 是这样的:

但是,如果我尝试创建一个new User(),我会收到错误Fatal error: Class 'User' not found in /var/www/public/api/v1/index.php on line 8

查看 composer autoload_psr4.php 文件,它看起来不错:

// autoload_psr4.php @由 Composer 生成

任何人都可以指出我在上面哪里出错了吗?

0 投票
1 回答
1281 浏览

php - PSR 4 自动加载找不到类

我不确定为什么我的 PSR-4 自动加载器不工作。

我的 composer.json 文件很简单

我的 PHP 文件,位于 src/Filters

在位于根目录的主文件中,我有以下内容

但是当我尝试运行我得到的代码时

致命错误:在第 7 行的 /var/www/html/dev/foo.php 中找不到类“Filters\BlogFilter”

我不确定为什么它不起作用,我尝试运行composer updatecomposer installcomposer dumpautoload错误仍然出现。

我的完整工作结构如下

0 投票
0 回答
53 浏览

php - php composer重用修改包

使用composer,如果我修改常量值和私有方法中的一些代码,我遇到了一个可以满足我需求的包。

我一直在尝试做的是创建自己的包并扩展我找到的另一个包,并尝试从我自己的类中覆盖这些方法。但是,由于包包含常量和私有方法,因此很难/不可能实现我自己的包以利用其他包。

我现在想知道的是使用其他包中的代码的最佳方法是什么?我是否将代码复制到自己的包中并更改命名空间并根据自己的需要修改代码?还是有另一种方法可以更改另一个包中的值并修改私有类?