Как использовать 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.

Author: Bruno Nascimento, 2017-04-03

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 после).

 0
Author: Gabriel Heming, 2017-04-03 18:42:21