# reaper (22.03.2015 / 22:35)
Вот такой вот Hello World получается.
[php]
require __DIR__ . '/vendor/autoload.php';
use Symfony\Component\HttpFoundation\Response;
$config = [
'routing' => [
'routes' => [
А разделить на MVC можно или это нужно для каждой страницы писать?
Rakovskiy, Что? Пока ограничений никаких нет, можешь лапшекод писать, можешь, как привык делать модели и контроллёры. Когда начну разбираться с CommandBus, видно будет. Может и появятся какие-нибудь ограничения.
# reaper (22.03.2015 / 23:46)
Rakovskiy, Что? Пока ограничений никаких нет, можешь лапшекод писать, можешь, как привык делать модели и контроллёры. Когда начну разбираться с CommandBus, видно будет. Может и появятся какие-нибудь
Не я просто смотрел примеры кода на Laravel и там в примерах Hello word такое
Route::get('/', function()
{
return 'Hello World';
});
Я просто не пойму как этим пользоваться, то есть так и писать туда весь код или может как-то разделить на MVC.
Rakovskiy, Как пользоваться? Читать документацию по Laravel. Я не знаю, как там всё устроено.
Вот тебе пример с MVC:
use Symfony\Component\HttpFoundation\Response;
class Model
{
public function getData()
{
return "MVC example\n";
}
}
class View
{
public function render($data)
{
return new Response($data);
}
}
class Controller
{
private $model;
private $view;
public function __construct(Model $model, View $view)
{
$this->model = $model;
$this->view = $view;
}
public function __invoke()
{
return $this->view->render($this->model->getData());
}
}
$config = [
'routing' => [
'routes' => [
'home' => [
'method' => 'GET',
'path' => '/',
'handler' => 'controller',
],
],
],
'container' => [
'definitions' => [
'model' => \DI\object(Model::class),
'view' => \DI\object(View::class),
'controller' => \DI\object(Controller::class)
->constructor(
\DI\link('model'),
\DI\link('view')
),
],
],
];
(new Vermillion\Http\Application($config))->run();
А можно ещё вот так сделать:
require __DIR__ . '/vendor/autoload.php';
use Symfony\Component\HttpFoundation\Response;
class Model
{
public function getData()
{
return "MVC example\n";
}
}
class View
{
public function render($data)
{
return new Response($data);
}
}
class Controller
{
private $model;
private $view;
public function __construct(Model $model, View $view)
{
$this->model = $model;
$this->view = $view;
}
public function __invoke()
{
return $this->view->render($this->model->getData());
}
}
$config = [
'routing' => [
'routes' => [
'home' => [
'method' => 'GET',
'path' => '/',
'handler' => Controller::class,
],
],
],
'container' => [
'use_autowiring' => true,
/*
'definitions' => [
'model' => \DI\object(Model::class),
'view' => \DI\object(View::class),
'controller' => \DI\object(Controller::class)
->constructor(
\DI\link('model'),
\DI\link('view')
),
],
*/
],
];
(new Vermillion\Http\Application($config))->run();
Или так:
require __DIR__ . '/vendor/autoload.php';
use Symfony\Component\HttpFoundation\Response;
class Model
{
public function getData()
{
return "MVC example\n";
}
}
class View
{
public function render($data)
{
return new Response($data);
}
}
class Controller
{
private $model;
private $view;
public function __construct(Model $model, View $view)
{
$this->model = $model;
$this->view = $view;
}
public function handle()
{
return $this->view->render($this->model->getData());
}
}
$config = [
'routing' => [
'routes' => [
'home' => [
'method' => 'GET',
'path' => '/',
'handler' => Controller::class . ':handle',
],
],
],
'container' => [
'use_autowiring' => true,
],
];
(new Vermillion\Http\Application($config))->run();
Та фиг его, всё равно как-то неудобно. Я может чего-то не понял, что ты написал. Но как мне удобней это реализация в Yii, Zend про другие не знаю. Там просто создаёшь контроллер, модель и представление в определённых папках, а остальное всё само подключается.
Rakovskiy, И роутинги ведь тоже надо настраивать, не так-ли?
В конце-концов не забывай, что это своего рода micro-framework.
Ну и посмотри на последние два примера. Ничто не мешает раскидать классы по файлам а файлы по директориям. Затем в роуте указываешь имя класса, который выступает в качестве контроллёра, а фреймворк дальше сделает всё сам.
вот чего не пойму
$config = [
'routing' => [
'routes' => [
'home' => [
'method' => 'GET',
'path' => '/',
'handler' => 'home',
зачем подобное держать в коде?
почему не вынести в файл(ы) конфигурации?
ramzes, Ничто не мешает сделать какой-нибудь config.php с return [/* ... */];
А затем: (new Vermillion\Http\Application(require 'config.php'))->run();
Это же всего-лишь пример.