【问题标题】:Slim 3 autoloaderSlim 3 自动装载机
【发布时间】:2015-07-19 11:28:09
【问题描述】:

我是 slim 框架的新手,不知道如何使用自动加载器来自动加载我的类。

我创建了一个app/models/myclass.php,但是当我尝试使用它时,我得到了一个找不到的类。我不确定哪种是自动加载类的正确方法,或者我应该使用的命名约定。我应该以某种方式通过 composer.json 来做吗?我在网上搜索了几个小时,但没有任何可靠的答案。

更新

设法这样做:

  • 在 app/src/Model/Client.php 中添加了模型
  • 在 Client.php 中添加了namespace App\Model;
  • 在 depedencies.php 中添加了以下内容:
$container['App\Model\Client'] = function ($c) {
    return new App\Model\Client();
};

和routes.php:

$app->get('/client/ping/{id}',  function ($request, $response, $args)  {
    $container = $this->getContainer();
    $client=$container['App\Model\Client']; //instantiates a new Client
    ...
    ...
}

【问题讨论】:

  • 在 Slim 3 中您不需要 use ($app),因为您可以调用 $this 来获取应用程序。
  • 你说得对,谢谢我会更新代码。

标签: php autoload slim


【解决方案1】:

对于自己的类的自动加载,您应该使用Composer,向您的composer.json 添加一些选项:

{
    "require": {
        "slim/slim": "^3.9"
    },
    "autoload": {
        "psr-4": {
            "My\\Namespace\\": "src/"
        }
    }
}
// index.php
require 'vendor/autoload.php';

$app = new \Slim\App();
$myClass = new \My\Namespace\MyClass();

在运行composer update 之后,composer 将注册您自己的命名空间并为您自动加载它们。

【讨论】:

  • 已经包含了。然后呢?如何为我的模型配置它?
  • 这是关于slim 3的,我认为应该在容器中的某处添加模型类。
  • 不能但可以。你上面的代码有效吗?如果仍然出现错误,请尝试在实例化之前添加前导反斜杠:return new \App\Model\Client();
  • 对不起,我没有使用你的答案,似乎通过作曲家安装的 Slim 3 已经有一个用于 app/src 的自动加载器。我相信您的答案是针对 Slim2。我只是把我的班级放在正确的路径上。
  • Composer 无法在您未指定文件时自动加载您的文件,或者注册一些知道在哪里搜索文件的自动加载器。你从哪里得到这些信息的?
【解决方案2】:

在 composer.json 文件中添加这个 其中 app1 是您要自动加载的文件夹的名称。

"autoload": {
    "psr-4":{
        "app1\\": "anything"
    }
}

完成此操作后,在 cmd 中运行(通过 composer)

composer dump-autoload -o

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-14
    • 2019-06-01
    相关资源
    最近更新 更多