Простой блог быдлокодера

4.12K
.
The Fast, Secure and Professional - Yii2
# 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, видно будет. Может и появятся какие-нибудь ограничения.
.
The Fast, Secure and Professional - Yii2
# reaper (22.03.2015 / 23:46)
Rakovskiy, Что? Пока ограничений никаких нет, можешь лапшекод писать, можешь, как привык делать модели и контроллёры. Когда начну разбираться с CommandBus, видно будет. Может и появятся какие-нибудь
Не я просто смотрел примеры кода на Laravel и там в примерах Hello word такое

Route::get('/', function()
{
    return 'Hello World';
});


Я просто не пойму как этим пользоваться, то есть так и писать туда весь код или может как-то разделить на MVC.
.
reaper
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();
.
The Fast, Secure and Professional - Yii2
Та фиг его, всё равно как-то неудобно. Я может чего-то не понял, что ты написал. Но как мне удобней это реализация в Yii, Zend про другие не знаю. Там просто создаёшь контроллер, модель и представление в определённых папках, а остальное всё само подключается.
.
Rakovskiy, И роутинги ведь тоже надо настраивать, не так-ли?

В конце-концов не забывай, что это своего рода micro-framework.

Ну и посмотри на последние два примера. Ничто не мешает раскидать классы по файлам а файлы по директориям. Затем в роуте указываешь имя класса, который выступает в качестве контроллёра, а фреймворк дальше сделает всё сам.
.
вот чего не пойму
$config = [
'routing' => [
'routes' => [
'home' => [
'method' => 'GET',
'path' => '/',
'handler' => 'home',

зачем подобное держать в коде?
почему не вынести в файл(ы) конфигурации?
.
reaper
ramzes, Ничто не мешает сделать какой-нибудь config.php с return [/* ... */];
А затем: (new Vermillion\Http\Application(require 'config.php'))->run();
Это же всего-лишь пример.
Всего: 215