关于 php:使旧版应用程序 PSR-4 兼容 | 珊瑚贝

Making Legacy Application PSR-4 Compatible


我有一个关于重构旧 PHP 应用程序以兼容 PHP\\ 的 PSR-4 标准的问题。我有一些位于 app/classes/ 文件夹中的类尚未正确命名空间,我希望在调用 composer\\’s vendor/autoload.php 时直接自动加载它们。我根据 \\<NamespaceName>(\\<SubNamespaceNames>)*\\<ClassName> 添加了一个命名空间,并尝试在 composer 的 vendor 文件夹下创建一个 vendor/myapp/classes/src/ 目录,并执行了 dump-autoload 命令但无济于事。类没有被加载,作曲家不知道在哪里可以找到它。关于如何做到这一点的任何指示?

谢谢,

一月

注意事项:
-> 我不想将源代码上传到任何可以公开搜索的存储库,例如 Packagist,因为代码仅供内部使用。

编辑:
这是我的 composer.json:

1
2
3
4
5
6
7

 “autoload”:{
   “psr-4”: {
     “Myapp\” :”Myapp
    }
  },

但现在结构看起来像:

1
2
3
4
5
6
7
8
9
10
11
12
13
->Myapp
–>Classes
—>Module1
—->submodule.php
—>Module2
—->submodule2.php
—>Module3
—->submodule3.php
—>Config
—->config.db.php

->vendor
–>autoload.php

这是我的问题/疑问:

  • 当我尝试加载 submodule.php 时,它又会加载 submodule2.php 和 submodule3.php,它会告诉我找不到 submodule3.php。 submodule3.php 的命名空间是 Myapp\\\\\\\\Classes\\\\\\\\Module3 但它说它没有找到。
  • 我想在每次调用 autoload.php 时强制包含 config.db.php
    • 请发布您的 composer.json。您需要使用 getcomposer.org/doc/01-basic-usage.md#autoloading 之类的 “psr-4”: 指令告诉 Composer 在哪里可以找到这些类


    我现在想通了。但是源文件不会驻留在 /vendor 文件夹中,这对我来说是可以的。如果你想让你的文件无论在哪个文件夹都自动加载,只需将它添加到 composer.json 中的 psr-4 块,或者如果它还没有,则创建它。在我的 composer.json 中,我在顶层对象上有这个块,它添加了我想要自动加载的文件夹,还包括我想要包含的特定文件,比如某种配置文件:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     “autoload”:{
       “files”: [
         “somefolder/somefile.php”
        ],
       “psr-4”: {
         “MyApp\” :”MyApp
        }
      },
      …

    这仅仅意味着作曲家应该自动加载驻留在 MyApp 目录中的文件,该目录也将具有 MyApp 的命名空间。

    所以我的文件夹结构现在看起来像这样:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ->MyApp
    –>Classes
    —>MyClass1.php   –> namespace MyApp\\Classes classname: MyClass1
    –>Components
    —>MyClass2.php   –> namespace MyApp\\Classes classname: MyClass2
    ->somefolder
    –>somefile.php
    ->vendor
    –>autoload.php
    ->index.php

    因此,如果我想在 index.php 中包含文件 MyClass1.php,我将添加如下:

    1
    2
    3
    4
    5
    6
    include_once( __DIR__ .“/vendor/autoload.php”);

    use \\MyApp\\Classes\\MyClass1;

    $foo = new MyClass1();
    $foo->bar();

    希望对你有帮助。


    您可以通过创建自己的 composer 包,将其添加到您的私有 git 存储库,然后将该包添加到项目的 composer.json 文件中来解决此问题:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    “require”: {
       “{your-vendor}/{package-name}”:“dev-master”
    },
    “repositories”: [
        {
           “type”:“vcs”,
           “url”:“git@bitbucket.org:{your-vendor}/{package-name}.git”
        }
    ],

    完成后,运行 composer update.

    • 我不认为这回答了关于 PSR-4 自动加载的问题


    来源:https://www.codenong.com/32077197/

    微信公众号
    手机浏览(小程序)

    Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

    Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

    Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_9543.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
    0
    分享到:
    没有账号? 忘记密码?