Создание веб-приложения PHP с нуля с использованием Slim as Architecture

Это мой долгий поиск по разработке веб-приложений с использованием ядра PHP и следованию лучшим возможным практикам, а не использованию фреймворка. Я многого добился, лучше структурировав свой проект. Однако... получение чистого URL-адреса часто является проблемой для больших приложений.

До сих пор... я использовал Slim Framework только для создания RESTFUL-сервисов вне моих веб-приложений.

Я использую Slim Framework для создания API для проекта PHP. Теперь у меня есть установка Slim и работает нормально. У меня есть маршруты, которые общаются с базой данных и обычно делают то, что должны делать. Мой вопрос связан с модульностью кода. На данный момент все мои маршруты определены в моем файле index.php в корневом каталоге. Я бы очень хотел разделить их, скажем, в папку /controllers.

Поскольку мне понравилось, как Slim создает довольно хорошие URL-адреса ... Мне интересно, можно ли использовать Slim в качестве архитектуры моего приложения ... и позволить всем моим страницам или API быть доступными через Slim index.php.


person Vishal Kumar    schedule 21.09.2016    source источник
comment
Вы можете проверить один из скелетов Slim для вдохновения.   -  person Mika Tuupola    schedule 22.09.2016


Ответы (2)


Да, довольно легко, вот шаги, которые я предпринял в недавнем проекте.

Сначала допустим, что у вас есть HomeActionController

class HomeActionController {

    //The below line I have moved into an abstract Controller class
    public $view = null;

    //This is using Slim Views PhpRenderer
    //This allows for a controller to render views can be whatever you need
    //I did not like the idea of passing the whole DC it seemed overkill
    //The below method I have moved into an abstract Controller class
    public function __construct(\Slim\Views\PhpRenderer $view = null){        
        if($view != null){
            $this->view = $view;
        }
    }  

    //View could be any action method you want to call it.
    public function view(Request $request, Response $response, array $args){
         $data['user'] = "John Doe";
         return $this->view->render($response, 'templates/home.php', $data);
    }
}

Теперь вам нужно иметь возможность вызывать экземпляр этого контроллера из маршрута, поэтому вам нужно добавить контроллеры, которые у вас есть, в DC.

Где бы вы ни создавали свой экземпляр slim, вам нужно будет получить DC и добавить экземпляр вашего контроллера:

$app = new \Slim\App($config['slim']);

// Get Dependency Container for Slim
$container = $app->getContainer();

$container['HomeActionController'] = new Controller\HomeActionController($container['view']); //Notice passing the view

В качестве примечания, приведенные выше экземпляры могли быть замыканиями, но я не видел смысла в то время или делать их. Кроме того, есть способы ленивой загрузки, которые я еще не исследовал, см. здесь для получения дополнительной информации.

Теперь последнее, что вам нужно сделать, это иметь возможность вызывать их на маршрутах, что не является большой проблемой.

$app->get('/home', 'HomeActionController:view');

Конечно, у вас не может быть действия с параметрами, но у меня не было проблемы с тем, чтобы просто передать их в запросе, а затем получить их оттуда.

person nerdlyist    schedule 21.09.2016
comment
Какую версию Slim вы используете. - person Vishal Kumar; 21.09.2016
comment
Я на последних 3-х что-то. - person nerdlyist; 21.09.2016

Если вы хотите создать приложение без фреймворка, я бы порекомендовал просмотреть этот небольшой репозиторий на github: https://github.com/PatrickLouys/no-framework-tutorial

Он проходит, когда вы настраиваете все с точки зрения маршрутизации, а также заставляет все проходить через index.php в общедоступной папке, как вы спрашиваете.

person virepo    schedule 21.09.2016