我刚刚开始使用composer进行依赖管理,我很难弄清楚我是如何不遵守psr-4进行自动加载的,所以我在这里寻求建议.我有一个类可以生成已经在包装上的随机值.项目结构如下(我标记了composer.json文件A和B):
项目目录
|classfile.php
A |composer.json
|vendor
|autoload.php
|ejfrancis
|php-random-value
B |composer.json
|RandomValue.php <--the class I want autoloaded
Run Code Online (Sandbox Code Playgroud)
composer.json A.
{
"require": {
"ejfrancis/php-random-value": "dev-master"
}
}
Run Code Online (Sandbox Code Playgroud)
composer.json B.
{
"name": "ejfrancis/php-random-value",
"description": "Secure random value generator.",
"require": {
"php": ">=5.3.0"
},
"license": "MIT",
"autoload": {
"psr-4": {
"ejfrancis\\" : ""
}
}
}
Run Code Online (Sandbox Code Playgroud)
最后是RandomValue.php文件,它声明了ejfrancis命名空间
namespace ejfrancis;
class RandomValue{
//foo
}
Run Code Online (Sandbox Code Playgroud)
当我运行应用程序时,我得到一个错误'类RandomValue not found',因此它不能正确自动加载.我不遵守psr-4,还是还有别的我做错了?我也尝试使用作曲家类图表进行自动加载"classmap" : ["RandomValue.php"]
,但没有成功.谢谢您的帮助
更新:我在composer.json B文件上运行'composer validate',它绝对有效
我一直想弄清楚为什么自动加载对“ Authentication \ auth()”不起作用的原因。“ dBase \ db()”类正在很好地加载,但是我得到了:
错误:在第8行的/var/htdocs/dev/test.php中找不到类'Authentication \ auth'
当调用test.php时。
根composer.json-
"require": {
"geeshoe/dbClass": "dev-develop",
"geeshoe/authClass": "dev-master"
},
"autoload": {
"psr-4": {
"dBase\\": "vendor/geeshoe/dbclass/",
"Authentication\\": "vendor/geeshoe/authClass/"
}
}
Run Code Online (Sandbox Code Playgroud)
authClass.php标头-
<?php
namespace Authentication;
use dBase\db;
class auth extends db
{
Run Code Online (Sandbox Code Playgroud)
test.php-
if (file_exists("vendor/autoload.php")) {
require "vendor/autoload.php";
} else {
echo "Dam.. Something went wrong!";
}
$test = new \dBase\db();
$var = new \Authentication\auth();
Run Code Online (Sandbox Code Playgroud)
如果有人能指出对我来说显而易见的话,那太好了。另外,出于测试目的,未在authClass-> composer.json文件中指定自动加载。
任何人都可以帮助我理解为什么这些单元测试在通过本地设置时在 CI 上失败的原因。
存储库位于https://github.com/jabranr/test-ci
测试在https://travis-ci.org/jabranr/test-ci
测试在 CI 中失败,并显示一个致命错误: PHP Fatal error: Class 'JRI\JabranCI\Exception\FooBarException' not found in /home/travis/build/jabranr/test-ci/test/exception/FooBarExceptionTest.php on line 11
该软件包使用 PSR-4 自动加载。这是composer.json和phpunit 配置。先感谢您!
我正在尝试实例化我使用composer安装的PHP邮件程序类.该类位于vendor\phpmailer\phpmailer\class.phpmailer.php中
-Project
-src
-SmtpHandler.php
-vendor
-phpmailer
-phpmailer
class.phpmailer.php
index.php
Run Code Online (Sandbox Code Playgroud)
我正在尝试在SmtpHandler中加载这个类,如下所示:
<?php
namespace Fusion;
require_once __DIR__ . '/../vendor/autoload.php';
class SmtpHandler {
var $mail;
function __construct () {
$this->mail = new PHPMailer;
Run Code Online (Sandbox Code Playgroud)
我的composer.json文件是自动加载我的php类,如下所示:
"autoload": {
"psr-4": {
"Fusion\\": "src"
}
},
Run Code Online (Sandbox Code Playgroud)
当$ this-> mail = new PHPMailer; 被叫,我收到一个错误致命错误:在第8行的/var/www/proj/Project/src/SmtpHandler.php中找不到类'Fusion\PHPMailer'
我需要使用vendor\phpmailer\phpmailer\class.phpmailer吗?或者我使用psr-4错了?
谢谢
PhpStorm突出显示以下命名空间是一个错误。
<?php
namespace App\Http\Controllers\Public;
Run Code Online (Sandbox Code Playgroud)
错误: Expected: identifier
一般来说。预留关键字public
(function
,)是否class
不适合命名空间?
我正在使用 PHP 进行一个简单的项目,并且正在使用 PSR-4 自动加载。我只是不知道是否有运行方式composer dump-autoload -o
上composer install
,让新用户无需键入composer dump-autoload -o
以避免自动加载错误
{
"name": "project/vendor",
"license": "MIT",
"authors": [
{
"name": "my name",
"email": "myemail@gmail.com"
}
],
"require": {
"phpunit/phpunit": "^7.5"
},
"autoload": {
"psr-4": {
"src\\": "src/"
}
},
"scripts": {
"run-test": ["./vendor/bin/phpunit tests/calculatorTests.php"]
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试 PHP 编码标准包:https://github.com/inpsyde/php-coding-standards,但是当我开始运行 phpcs 时,我得到:
nickan@nickan-VirtualBox:~/src/wordpress/wp-content/plugins/my-plugin$ vendor/bin/phpcs ./src/model/Users.php
E 1 / 1 (100%)
FILE: /home/src/wordpress/wp-content/plugins/my-plugin/src/model/Users.php
-------------------------------------------------------------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
-------------------------------------------------------------------------------------------------------------------------------
5 | ERROR | Class 'Plugin\Model\Users', located at
| | '/home/src/wordpress/wp-content/plugins/my-plugin/src/model/Users.php', is not
| | compliant with PSR-4 configuration. (Inpsyde.CodeQuality.Psr4.InvalidPSR4)
Run Code Online (Sandbox Code Playgroud)
这是路径中的文件my-plugin/src/model/Users.php
<?php declare(strict_types=1);
namespace Test\Model;
class Users
{
}
Run Code Online (Sandbox Code Playgroud)
我不明白出了什么问题,代码工作正常,但错误不断出现。我尝试使用不同的命名空间、更改文件夹等,但仍然无济于事,将不胜感激。谢谢。
我正在尝试实现一个辅助函数,它可以帮助我在 MVC 应用程序中“添加”路由(映射到控制器/操作)。
我的index.php 文件如下所示。
// use block
use App\Router;
use App\Config;
use App\Core\Database;
use App\Bootstrap;
// dependencies
$router = new Router;
$config = new Config;
$database = new Database($config);
$bootstrap = new Bootstrap($router, $database);
// routes
require '../App/Routes.php';
$bootstrap->router->dispatch($_SERVER['QUERY_STRING']);
Run Code Online (Sandbox Code Playgroud)
我的“路线”文件中有一条路线,我的路线如下所示。
$bootstrap->router->add('/home', ['controller' => 'home', 'action' => 'index']);
Run Code Online (Sandbox Code Playgroud)
我更愿意像这样简单地将根添加到我的文件中......
route('/home', ['controller' => 'home', 'action' => 'index']);
Run Code Online (Sandbox Code Playgroud)
所以我需要做一个辅助函数
问题
感谢 psr-4 自动加载,我知道如何在需要时提取类,但是当涉及到平面旧函数时,这一点不太清楚。如何将辅助函数干净地添加到 MVC 框架中,而无需到处添加 require 文件?
非常感谢您的时间和考虑!
我有一个简单的PHP Web应用程序,具有以下结构:
/ (composer.json .htaccess ...)
/Core/ (Router.php, Controller.php ...)
/App/ (/Controllers, /Models, /Views ...)
/Public/ (index.php ...)
/Vendor/ (autoload.php /composer ...)
Run Code Online (Sandbox Code Playgroud)
代码在我的本地服务器上运行没有问题.
当我将它复制到实时服务器并对路由中的.htaccess进行必要的更改时,我收到以下错误:致命错误:未找到类'Core\Router'....我尝试了3个不同的主机但没有运气.
问题似乎与使用psr-4在名称空间和类中加载的composer autoload函数无关.我在composer.json文件中设置了这个:
{
"autoload": {
"psr-4": {
"Core\\": "Core/",
"App\\": "App/"
}
}
Run Code Online (Sandbox Code Playgroud)
我项目的代码在GitHub上
https://github.com/imoprojects/upbook
我是MVC结构编程的新手,也是以这种方式使用composer的新手.
如果有人可以协助可能发生的事情,我会非常感激.
干杯,伊恩
我一直在玩一些Composer
自动加载,我遇到了一些问题所以目录结构是
index.php
app/
helpers/
router.php
vendor/
composer/
/*usual files*/
autoload.php
Run Code Online (Sandbox Code Playgroud)
在我的内心,我composer.json
有以下内容
"autoload": {
"psr-4": {
"App\\": "app/"
}
}
Run Code Online (Sandbox Code Playgroud)
在我的index.php
我有
<?php
// Autoload our namespaces
require __DIR__.'/vendor/autoload.php';
use App\Helpers\Router;
$route = new Router;
Run Code Online (Sandbox Code Playgroud)
得到以下错误
Fatal error: Class 'App\Helpers\Router' not found in /var/www/public/index.php on line 6
我尝试了一些不同的东西来尝试让它工作,但我不确定我哪里出错了.这是我第一次在框架之外使用Composer进行自动加载,所以会很感激任何指导.
psr-4 ×11
php ×10
composer-php ×5
autoload ×4
namespaces ×2
.htaccess ×1
autoloader ×1
frameworks ×1
helper ×1
keyword ×1
phpcs ×1
phpmailer ×1
phpstorm ×1
phpunit ×1
psr-1 ×1
travis-ci ×1