Как использовать psr-4 в composer с различных подпапок
Я создаю фреймворк для тестирования. Я использую composer для создания структуры моего проекта. Файл composer.json выглядит так:
{
"autoload": {
"psr-4": {
"App\\": "src/app/mvc/"
}
}
}
Разделить мой проект со следующей структурой:
C:\xampp\htdocs\webApp\src\app\mvc\
mvc у меня есть следующие вложенные папки: controller; model; view
Время, что я с проблемами в пространстве имен.
например, для /model/model.php код был:
<?php
namespace App;
class Model
{
public function getText($str = 'Olá mundo!')
{
return $str;
}
}
controller/controller.php код был:
<?php
namespace App\controller;
class Controller
{
public function index()
{
$model = new model\Model;
$view = new view\View;
$view->render($model->getText());
}
}
php возвращает ошибку, в контроллер.php Fatal error: Class 'App\controller\model\Model' not found in C:\xampp\htdocs\webApp\src\app\mvc\controller\Controller.php on line 7
Кто-то знает сообщить, что это неправильно в конфигурации psr4.
1 answers
Есть некоторые изменения для выполнения в коде.
Конфигурации composer правильно. Тем не менее, ваши PHP кода должны быть изменены.
Посмотрите, в вашей конфигурации composer:
"App\": "src/app/mvc/"
, Посмотрите на его структуру:
C:\xampp\htdocs\webApp\src\app\mvc\
Вскоре после этого, вы создали класс Model
файл model.php
, в результате чего, по следующему пути:
C:\xampp\htdocs\webApp\src\app\mvc\model\model.php
Вскоре, имен правильный него должно быть:
namespace App\model;
class Model {}
, И вы создали, как:
namespace App;
class Model { }
Вызов пространство имен также должен быть правильным. Например, в пространстве имен контроллера, может осуществляться в двух формах:
namespace App\controller;
class Controller
{
public function index()
{
$model = new \App\model\Model;
}
}
namespace App\controller;
use \App\model; //é interpretado como "use \App\model as model"
class Controller
{
public function index()
{
$model = new model\Model;
}
}
И в конкретном класса:
namespace App\controller;
use \App\model\Model; //é interpretado como "use \App\model\model as Model"
class Controller
{
public function index()
{
$model = new Model;
}
}
Пропущенный уровня namespace
, что бы папки model
, controller
view
.
Другой важная деталь, в windows файловой системы, case-insensitive, уже в linux чувствительны к регистру. Вскоре его системы файлы должны иметь тот же корпус, что namespaces
и classes
.
Logo:
namespace App\model;
class Model {}
-:
C:\xampp\htdocs\webApp\src\App\mvc\model\Model.php
Папке App
и файл Model.php
.
, Но это справедливо только для систем Linux, в вашем случае это Windows, даже если (даст вам головную боль deploy после).