2014年8月20日水曜日

PHPのURLルーティング用ルーター「PHRoute」

PHPのURLルーティング用ルーター「PHRoute」を設定してみました。簡易的なルーターですが、必要十分。コントローラーも書けますし、ちょっとしたサイトを作成するには、十分に使えると思います。気に入りました。

index.php
<?php
require './vendor/autoload.php';

$router = new Phroute\RouteCollector();

$router->any('/', function(){
  return 'Hello world.';
});

$router->any('/example', function(){
  return 'This is an example';
});

$router->any('/page/{id:\d+}', function($id){
  return 'page number is ' . $id;
});

$router->get(['/user/{name}', 'username'], function($name){
  return 'Hello ' . $name;
});

// Test
class Test {
  public function anyIndex()
  {
    return 'This is the default page /controller/index';
  }

  public function anyTest($param, $param2 = 'default')
  {
    return 'This will respond to /controller/test/{'.$param.'}/{'.$param2.'} with any method';
  }

  public function getTest()
  {
    return 'This will respond to /controller/test with only a GET method';
  }

  public function postTest()
  {
    return 'This will respond to /controller/test with only a POST method';
  }

  public function putTest()
  {
    return 'This will respond to /controller/test with only a PUT method';
  }

  public function deleteTest()
  {
    return 'This will respond to /controller/test with only a DELETE method';
  }
}
$router->controller('/controller', 'Test');


$dispatcher = new Phroute\Dispatcher($router);

try {
  $response = $dispatcher->dispatch($_SERVER['REQUEST_METHOD'], $_SERVER['REQUEST_URI']);
  echo $response;
  exit;
} catch (Phroute\Exception\HttpRouteNotFoundException $e) {
  print '<pre>' ;
  print_r($e) ;
  print '</pre>' ;
  exit;
} catch (Phroute\Exception\HttpMethodNotAllowedException $e) {
  print '<pre>' ;
  print_r($e) ;
  print '</pre>' ;
  exit;
}
?>
.htaccess
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]


参考サイト
Fast PHP Routing with PHRoute(SitePoint)

0 件のコメント:

コメントを投稿