Класс новый Instanse в php Mvc Структура - PullRequest
1 голос
/ 23 июня 2019

Я работаю с собственным проектом, используя структуру MVC и класс автозагрузки, используя PSR-4, используя composer.Я выбираю библиотеку Php Fastroute для своего маршрутизатора.

Моя структура:

enter image description here

index.php

define('DS', DIRECTORY_SEPARATOR, true);
define('BASE_PATH', dirname(__DIR__) . DS, TRUE);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

require '../vendor/autoload.php';
require '../application/core/Core.php';

// Our framework is now handling itself the request
$app = new Framework\Core();

$response = $app->handle();

Контроллер:

namespace App\Core;

class Controller
{

    public $templates;

    public function __construct()
    {

        // My Question
        $this->config = new \App\Core\Setting();
        $this->Language = new Language('en');
        $this->Url = new \App\Core\Url(Config::get('URL'),Config::get('URL'));
        $this->templates = new \League\PlatesEngine(Config::get('PATH_VIEW'));
        $this->Document = new \App\Core\Document();
    }

    public function loadModel($name, $path = null) {

        $path = ($path === null) ? 'Catalog' : $path;

        $path = '\App\\'.$path.'\Model\\'.$name;

        $this->model = new $path;

        return $this->model;

    }

    public function loadController($name) {

        $path = '\App\Catalog\Controller\\'.$name;

        $this->controller = new $path;

        return $this->controller;

    }
}

IndexController:

namespace App\Catalog\Controller\Home;

class IndexController extends \App\Core\Controller
{
    public function index()
    {
        $add['power'] = $this->config->get('on');
        $data['title'] = $this->Language->get('text_title');
        $this->templates->addData($data, 'common/header');
        //.... More Code
    }
}

В действие я помещаю новый экземпляр класса (библиотека и базовый класс, например: Config или Ducoment или Templates или многие другие, если это необходимо)...) в __construct() Моста Controller и продолжается IndexController.эта модель работает для меня, но я не знаю, этот метод является истинным или ложным ?!На самом деле мне нужно загрузить Object (новый экземпляр) из базового класса в мой IndexController Но я не знаю, где он будет размещен (лучше и лучше) ?!(в Base Controller - в IndexController - в Core.php and require - в Index.php) ??

1 Ответ

0 голосов
/ 23 июня 2019

Я хотел бы дать вам несколько идей о том, как структурировать MVC 2 веб-приложение на PHP:

Структура каталогов

Использовать стандарты PHP (FIG), такие как

  • Современный стиль кодирования (PSR-1, PSR-2, PSR-12)
  • Стандарт PHPDoc (PSR-5, PSR-19)
  • Класс автозагрузчика (PSR-4)
  • HTTP-запрос и ответ (PSR-7)
  • Обработчики запросов HTTP-сервера, промежуточное программное обеспечение (PSR-15)
  • HTTP-фабрики (PSR-17)
  • Контейнер для инъекций зависимостей (PSR-11): лига / контейнер

Другие полезные советы и библиотеки:

  • Использовать роутер: я бы порекомендовал лигу / маршрут (на основе fastroute)
  • Контроллеры одиночного действия ( ADR )
  • Ведение журнала (PSR-3): монолог / монолог
  • База данных Миграции: Phinx
  • Дата и время обработки: Chronos
  • Консольные команды: Symfony / console
  • Модульное тестирование: PHPUnit

На ваш вопрос:

  • Не используйте наследование (расширение) больше (если возможно), вместо этого используйте композицию (внедрение зависимостей).
  • Использовать инъекцию construtor
  • Не создавайте экземпляры самостоятельно, пусть контейнер внедрения зависимостей (DIC) справится с этой задачей.
  • Сделайте ваши классы "окончательными" по умолчанию (кроме классов репозитория)
  • Ваш контроллер должен обрабатывать только одну вещь (SRP). Контроллер одиночного действия будет более совместимым с SOLID.
  • Вы уверены, что все свойства контроллера должны быть открытыми?
  • Термин «Модель» звучит для меня как «Активный шаблон записи». Возможно, рассмотрите "Репозитории" как лучшее решение.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...