标签: psr-4

PSR-0和PSR-4之间有什么区别?

最近我读到了名称空间以及它们如何有益.我目前正在Laravel中创建一个项目,并试图从类地图自动加载转移到命名空间.但是,我似乎无法掌握PSR-0和PSR-4之间的实际差异.

我读过的一些资源是......

我的理解:

  • PSR-4不会将下划线转换为目录分隔符
  • 作曲家的某些特定规则会导致目录结构变得复杂,从而使PSR-0命名空间变得冗长,从而创建了PSR-4

可以理解解释差异的例子.

php psr-0 laravel composer-php psr-4

210
推荐指数
4
解决办法
6万
查看次数

非空PSR-4前缀必须以命名空间分隔符结尾

我正在尝试用Composer设置PSR-4,但我刚刚开始 A non-empty PSR-4 prefix must end with a namespace separator.

autoloadcomposer.json看起来像这样:

"autoload": {
    "psr-4": {
        "Acme\\models" : "app/models"
    }
},
Run Code Online (Sandbox Code Playgroud)

app/models 是空的.

我究竟做错了什么?我怎样才能解决这个问题?

composer-php psr-4

81
推荐指数
2
解决办法
3万
查看次数

如果classmap实际上更快,为什么在composer中使用PSR-0或PSR-4自动加载?

我知道你可以使用PSR标准来定位文件,或者告诉作曲家一个目录来扫描类.文档建议使用PSR-4标准.作曲家还可以选择创建优化的自动加载器,它基本上可以生成完整的类图.那么,如果加载的最佳方式是使用类图,为什么要使用PSR-4呢?

保持目录结构对我来说是有意义的,因为这是一种很好的组织方式.但是,似乎逻辑选项是在开发机器上使用PSR-4加载,然后在生产环境中使用类映射.这样,您不必在每次创建新类时都重建类图,但生产环境会在部署过程中创建一个完整的类,而无需额外调用

./composer.phar dump-autoload -o
Run Code Online (Sandbox Code Playgroud)

php autoload psr-0 composer-php psr-4

30
推荐指数
3
解决办法
2万
查看次数

类不符合 psr-4 自动加载标准。跳绳

我尝试使用作曲家自动加载,但出现此错误

作曲家.json

{
    "autoload":{
        "psr-4":{
            "App\\":"app/"
        },
        "files": ["app/functions/helper.php"]
    },
    "require": {
        "vlucas/phpdotenv": "^2.4",
        "altorouter/altorouter": "^1.2",
        "philo/laravel-blade": "^3.1"
    },
    "config":{
        "optimize-autoloader":true
    }
}
Run Code Online (Sandbox Code Playgroud)

我的终端输出

Generating optimized autoload files
Class App\Controllers\BaseController located in D:/php/Xamp/htdocs/MVC_PHP/app\controllers\BaseController.php does not comply with psr-4 autoloading standard. Skipping.
Class App\Controllers\IndexControllers located in D:/php/Xamp/htdocs/MVC_PHP/app\controllers\IndexControllers.php does not comply with psr-4 autoloading standard. Skipping.
Class App\RoutingDispatcher located in D:/php/Xamp/htdocs/MVC_PHP/app\routing\RoutingDispatcher.php does not comply with psr-4 autoloading standard. Skipping.
Generated optimized autoload files containing 508 classes
Run Code Online (Sandbox Code Playgroud)

php composer-php psr-4

21
推荐指数
1
解决办法
4万
查看次数

PSR-4和classmap自动加载之间的区别?

关于Laravel,我有一个关于Composer自动加载的问题,即"psr-4"和"classmap"自动加载之间的区别.

我知道的一个区别是PSR-4不需要dumpautoload为每个更改或添加新文件重复,而classmap需要dumpautoload包含类或在指定目录中添加新文件的现有文件中的每个更改.

autoload composer-php psr-4

20
推荐指数
1
解决办法
8290
查看次数

是否可以在同一文件中使用同一名称空间下的多个类

是否可以在同一个文件夹中使用同一名称空间下的多个类?我想做这样的事情:

<?php
  namespace MyNamespace\Helpers\Exceptions

  use Exception;

  class CustomException1 extends Exception{}

  class CustomException2 extends Exception{}

  class CustomException3 extends Exception{}
Run Code Online (Sandbox Code Playgroud)

避免为每个自定义异常类使用一个文件.问题是,当我尝试在另一个类中使用其中一个自定义异常时,

use MyNamespace\Helpers\Exceptions\CustomException1;
Run Code Online (Sandbox Code Playgroud)

找不到CustomException1类.有任何想法吗?

php oop namespaces psr-4

17
推荐指数
1
解决办法
9979
查看次数

使用Composer进行PSR-4自动加载

我用composer的自动加载类系统运行一个portail:

"autoload": {
    "psr-4": {
        "Portal\\": "src/"
    }
}
Run Code Online (Sandbox Code Playgroud)

它在我运行时有效composer.phar dump -o,例如我的类Boostrap被很好地引用到vendor/composer/autoload_classmap.php文件中:

'Portal\\Core\\Bootstrap' => $baseDir . '/src/core/Bootstrap.php',
Run Code Online (Sandbox Code Playgroud)

但是当我没有在自动加载转储上运行优化选项时,自动加载系统不再起作用了:

Fatal error: Class 'Portal\Core\Bootstrap' not found in /var/www/portail/prod/web/index.php on line 7
Run Code Online (Sandbox Code Playgroud)

如何在没有-o选项的情况下进行自动加载?

php autoload composer-php psr-4

14
推荐指数
1
解决办法
2万
查看次数

Laravel错误'ReflectionException' - 'Class App\Http\Kernel不存在'

我试图接受一年后在学校开发的laravel项目,我遇到了一些问题.在我的托管服务的服务器上上传整个项目后,我在浏览器和SSH shell上都出现了这些错误.

致命错误:/home/clients/ffa41f94063541f86a0fe6602a73caa1/myforms/vendor/laravel/framework/src/Illuminate/Container/Container.php:779未捕获的异常'ReflectionException',消息'Class App\Http\Kernel'不存在'堆栈跟踪:#0 /home/clients/ffa41f94063541f86a0fe6602a73caa1/myforms/vendor/laravel/framework/src/Illuminate/Container/Container.php(779):ReflectionClass - > __ construct('App\Http\Kernel')#1/home/clients /ffa41f94063541f86a0fe6602a73caa1/myforms/vendor/laravel/framework/src/Illuminate/Container/Container.php(659):Illuminate\Container\Container-> build('App\Http\Kernel',Array)#2/home/clients/ffa41f94063541f86a0fe6602a73caa1/myforms/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(644):Illuminate\Container\Container-> make('App\Http\Kernel',Array)#3/home/clients/ffa41f94063541f86a0fe6602a73caa1 /myforms/vendor/laravel/framework/src/Illuminate/Container/Container.php(229):Illuminate\Foundation\Application-> make('App\Http\Kernel',Array)位于779行的/home/clients/ffa41f94063541f86a0fe6602a73caa1/myforms/vendor/laravel/framework/src/Illuminate/Container/Container.php中的#4/home/clients/ffa41f94063

我认为它可能与我的命名空间配置有关,因为我还没有完全理解.

这是我的composer.json文件:

{
	"name": "laravel/laravel",
	"description": "The Laravel Framework.",
	"keywords": ["framework", "laravel"],
	"license": "MIT",
	"type": "project",
	"require": {
		"laravel/framework": "5.0.*",
		"illuminate/html": "5.*",
		"barryvdh/laravel-dompdf": "0.5.*",
		"guzzlehttp/guzzle": "~4.0"

	},
	"require-dev": {
		"phpunit/phpunit": "~4.0",
		"phpspec/phpspec": "~2.1"
	},
	"autoload": {
		"classmap": [
			"database"
		],
		"psr-4": {
			"App\\": "myforms/app/"
		}
	},
	"autoload-dev": {
		"classmap": [
			"tests/TestCase.php"
		]
	},
	"scripts": {
		"post-install-cmd": [
			"php artisan clear-compiled",
			"php artisan optimize"
		],
		"post-update-cmd": [ …
Run Code Online (Sandbox Code Playgroud)

php namespaces laravel psr-4

12
推荐指数
1
解决办法
2万
查看次数

在Yii2中使用没有名称空间的类

我想将Checkout SDK与Yii2 一起使用,但由于该库不支持PSR-4标准(命名空间),因此无法集成它.如何将此库用于我的目的?

编辑

正如我所建议的那样,我试着用class作为

$sale = new \Twocheckout_Sale();
Run Code Online (Sandbox Code Playgroud)

但我仍然无法使其发挥作用.

php namespaces 2checkout yii2 psr-4

11
推荐指数
1
解决办法
9705
查看次数

PSR-4 autoloader致命错误:找不到类

我有我的项目结构:

src/
   ?? Model/
      ?? User.php
Run Code Online (Sandbox Code Playgroud)

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

<?php
namespace Bix\Model;

class User {
Run Code Online (Sandbox Code Playgroud)

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

"autoload": {
    "psr-4": {
      "Bix\\": "src/"
    }
  }
Run Code Online (Sandbox Code Playgroud)

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

use Bix\Model\User;

// PSR-4 Autoloader.
require_once "vendor/autoload.php";
Run Code Online (Sandbox Code Playgroud)

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

看一下作曲家autoload_psr4.php文件看起来没问题:

// Autoload_psr4.php由Composer生成

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname(dirname($vendorDir));

return array(
    'XdgBaseDir\\' => array($vendorDir . '/dnoegel/php-xdg-base-dir/src'),
    'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'),
    'KeenIO\\' => array($vendorDir . '/keen-io/keen-io/src'),
    'Bix\\' => array($baseDir . '/src'),
); 
Run Code Online (Sandbox Code Playgroud)

任何人都可以指出我上面的错误吗?

autoload composer-php psr-4

11
推荐指数
1
解决办法
2万
查看次数

标签 统计

psr-4 ×10

composer-php ×7

php ×7

autoload ×4

namespaces ×3

laravel ×2

psr-0 ×2

2checkout ×1

oop ×1

yii2 ×1