ディレクトリ構成

Symfonyベースのマイクロフレームワークを使う。

vendor/
web/index.php
web/view

index.php

<?php

// Silex登録
require_once __DIR__.'/../vendor/autoload.php';
$app = new Silex\Application();

// Twig登録
use Silex\Provider\TwigServiceProvider;
$app->register(new Silex\Provider\TwigServiceProvider(), array('twig.path'=>__DIR__.'/view'));

// SessionService登録
use Silex\Provider\SessionServiceProvider;
$app->register(new SessionServiceProvider());

// Request/Response
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;


/*
 * 以下にコントローラを記載する。
 * 機能にさらにコントローラを分解するにはmountメソッドを利用。
 */
// Controller
// 機能X
$app->mount('/funcx', include 'controller/funcx.php');
// 機能Y
$app->mount('/funcy', include 'controller/funcy.php');

// error handler
$app->error(function(\Exception $e, $code) use($app) {
    switch ($code) {
        case 404:
            $error = 'The requested page could not be found.';
            break;
        default:
            $error = 'We are sorry, but something went terribly wrong.';
    }
    return new Response($error, $code);
});

$app->run();

funcx.php

<?php

// Request/Response
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

use Symfony\Component\HttpKernel\HttpKernelInterface;

$funcxApp = $app['controllers_factory'];

// filter
$funcxApp->before(function (Request $request) use ($app) {
});

// Controller
$funcxApp->get('/', function(Request $request) use ($app) {
    return $app['twig']->render('filepath', $array);
});

まとめ

セッション関連

$app['session']->clear();
$app['session']->get('name');
$app['session']->set('name', $data);

リクエスト関連

$request->get('name');

REQUEST/RESPONSE、Twig関連

# リダイレクト
return $app->redirect('url');

# フォーワード
$subRequest = Request::create('url', 'GET');
return $app->handle($subRequest, HttpKernelInterface::SUB_REQUEST);

# Twigレンダリング
return $app['twig']->render('filepath', $array);