首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未找到PHP自动加载类

未找到PHP自动加载类
EN

Stack Overflow用户
提问于 2016-01-29 04:32:35
回答 1查看 586关注 0票数 2

让我先解释一下我为达到这一点所做的一切。这里有一个关于github的教程叫做“无框架”,它是https://github.com/PatrickLouys/no-framework-tutorial非常好的教程!我已经完成了它,现在我想要添加更多的库。我有自动加载的作曲家设置,文件看起来像这样。

代码语言:javascript
复制
{
"name": "xxx/no-framework",
"description": "no framework",
"authors": [
    {
        "name": "xxx",
        "email": "xxx@gmail.com"
    }
],
"require": {
    "php": ">=5.5.0",
    "filp/whoops": ">=1.1.2",
    "patricklouys/http": ">=1.1.0",
    "nikic/fast-route": "^0.7.0",
    "rdlowrey/auryn": "^1.1",
    "twig/twig": "~1.0",
    "illuminate/database": "*"
},
"autoload": {
    "psr-4": {
        "App\\": "src/"
    }
}

}

在我的src文件夹中,我创建了一个名为Models的文件夹,在那里有一个Books.php,在Books.php中有

代码语言:javascript
复制
<?php
    class Book extends \Illuminate\Database\Eloquent\Model{
        protected $table = 'books';
    }

在我的Bootstrap.php文件中,我在要求编写器自动加载器之后包含了这一行

代码语言:javascript
复制
include('Database.php');

Database.php文件也在src中,如下所示

代码语言:javascript
复制
<?php

    use \Illuminate\Database\Capsule\Manager as Capsule;  

    $capsule = new Capsule; 

    $capsule->addConnection(array(
        'driver'    => 'mysql',
        'host'      => 'localhost',
        'database'  => 'test',
        'username'  => 'test',
        'password'  => 'l4m3p455w0rd!',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => ''
    ));

    $capsule->bootEloquent();

现在是错误。当我试图在我的控制器中使用Book类时,尝试在其中一个控制器中使用use

代码语言:javascript
复制
<?php

    namespace App\Controllers;

    use Http\Request;
    use Http\Response;
    use App\Template\Renderer;
    use App\Models\Book as Book;


    class Pages{
       private $request;
       private $response;
       private $renderer;

       public function __construct(Request $request, Response $response, Renderer $renderer){
           $this->request = $request;
           $this->response = $response;
           $this->renderer = $renderer;
       }

       public function index(){
          $book = new Book;
          $book->title = 'test';
          $book->save();

          $html = $this->renderer->render('index');
          $this->response->setContent($html);
      }
  }

我说“没有找到类‘App\Model\Book’”时出了个错误,我没有正确地自动修改某些内容,但是别名在composer.json中,或者其他东西是错误的。帮助?本教程使用了一个名为Auryn的依赖注入器库,也许我在那里遗漏了什么?不过,我对此表示怀疑。

编辑:如果我将use语句更改为include (类似于so include('../src/Models/Book.php'); ),并在类实例化(例如so $book = new \Book; )前面放置一个\,那么它就能工作,但这显然不是正确的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-29 04:58:45

我相信Composer类地图只是告诉系统在哪里找到给定类的文件。PHP仍然需要知道名称空间。Pages位于App\Controllers命名空间中。Book没有一个,因此它将存在于\Book的全局命名空间中。您的Books.php (文件名通常与它们包含的类相匹配,Book.php也是如此)应该包含一个名称空间声明。我建议namepsace App\Models;。还可以将use语句更改为use \Book

注意,不需要来别名它。它是您使用的唯一Book类,因此,正如您对Request所做的那样,类可以通过其完全命名空间的最后一部分引用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35076928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档