March 21, 2014

オレオレPhalconを作ってみる (とりあえずルーティング周り)

追記: レポジトリ作りました。 https://github.com/mamor/phalcon-myapp

--

Phalconはディレクトリ構造が凄く自由なので、適当に自分好みな感じに作っていこうと思います。

Phalcon DevTools (1.3.0)で、プロジェクトを作ります。
$ phalcon project phalcon_project
  • app/controllers/ControllerBase.php
  • app/controllers/IndexController.php
は削除します。app/controllers/ が空になるので、一応 .gitkeep を入れておきました。

以下の composer.json を作成して "composer install" します。以後、app/classes/に、App\Xxx\Yyyみたいな名前空間でクラスを作成します。コントローラもその中に作ります。
{
    "autoload": {
        "psr-0": {
            "App": "app/classes"
        }
    }
}

public/index.php に、以下を追記します。services.phpの読み込み後にしました。
/**
 * Bootstrap
 */
include __DIR__ . "/../app/bootstrap/bootstrap.php";

app/bootstrap/bootstrap.php を作成します。composer の autoload.php と、自作ルーティング設定ファイルの読み込みを行っています。
<?php

require_once __DIR__.'/../../vendor/autoload.php';
require_once __DIR__.'/routes.php';

app/bootstrap/routes.php を作成します。自動ルーティングをしないようにして、"/"に対するコントローラ::アクションと、not foundなコントローラ::アクションを登録しています。
<?php

/** Phalcon\DI\FactoryDefault $di */

$di->set('router', function () {
    $router = new Phalcon\Mvc\Router(false);
    $router->setDefaults(['namespace' => 'App\Controller', 'controller' => 'error', 'action' => 'route404']);

    $router->add('/', 'Index::index');

    return $router;
});

app/classes/App/Controller ディレクトリを作成して、以下の3つのコントローラを作成します。

AppController.php
<?php namespace App\Controller;

use Phalcon\Mvc\Controller;

class AppController extends Controller
{
}
ErrorController.php
<?php namespace App\Controller;

class ErrorController extends AppController
{
    public function route404Action()
    {
        $this->response->setStatusCode(404, 'Not Found');
    }
}
IndexController.php
<?php namespace App\Controller;

class IndexController extends AppController
{
    public function indexAction()
    {
    }
}

app/views/ ディレクトリに、各ビューファイル(.volt)を作成 or 編集します。

layouts/default.volt
<!DOCTYPE html>
<html>
    <head>
        <title>{% block title %}{% endblock %}</title>
    </head>
    <body>
        {% block content %}{% endblock %}
    </body>
</html>
index/index.volt
{% extends "layouts/default.volt" %}

{% block title %}Index{% endblock %}

{% block content %}
Index
{% endblock %}
error/route404.volt
{% extends "layouts/default.volt" %}

{% block title %}Error{% endblock %}

{% block content %}
Not Found
{% endblock %}

後ほど、GitHubにメモ用なレポつくろうと思います。

No comments:

Post a Comment