нет фреймворка — класс автозагрузки PHP не найден

позвольте мне сначала объяснить, что я сделал, чтобы достичь этой точки. На github есть учебник, который называется no-framework. https://github.com/PatrickLouys/no-framework-tutorial очень хороший урок! Я завершил его и теперь хочу добавить больше библиотек. У меня есть настройка композитора с автозагрузкой, и файл выглядит следующим образом.

{
"name": "xxx/no-framework",
"description": "no framework",
"authors": [
{
"name": "xxx",
"email": "[email protected]"}
],
"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 у меня есть это

<?php
class Book extends \Illuminate\Database\Eloquent\Model{
protected $table = 'books';
}

и в моем Bootstrap.php Файл, который я включил в эту строку после необходимости автозагрузчика композитора

include('Database.php');

Database.php Файл также находится в src и выглядит так

<?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 это в одном из моего контроллера, как это

<?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 \ Models \ Book’ not found» Я предполагаю, что я не загружаю что-то правильно, но псевдоним есть в composer.json или может быть что-то еще не так idk. Помогите?
В учебнике используется библиотека инжекторов зависимостей под названием Auryn, может, я что-то там упустил? ИДК сомневаюсь, хотя.

РЕДАКТИРОВАТЬ: Если я изменю use заявление к include вот так
include('../src/Models/Book.php');
и положить \ перед экземпляром класса, как так
$book = new \Book;
и тогда это работает, НО это явно не правильный путь.

2

Решение

Я полагаю, что карта классов Composer просто сообщает системе, где искать файлы для данного класса. PHP по-прежнему должен знать пространства имен. Pages находится в App\Controllers Пространство имен. Book не задан, поэтому он будет существовать в глобальном пространстве имен на \Book, Ваш Books.php (имена файлов обычно соответствуют классу, который они содержат, поэтому Book.php) должен включать объявление пространства имен. Я предлагаю namepsace App\Models;, Вы также можете изменить свой use заявление к use \Book,

Обратите внимание, что вы не необходимость чтобы псевдоним это. Это единственный Book класс вы используете так же, как вы сделали с Request на класс может ссылаться последний сегмент его полностью именованного обозначения.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]