LoginSignup
10
12

More than 5 years have passed since last update.

Slim(PHP Framework)事始め

Posted at

あらまし

ここ最近、配属先でSlimを使っているけど、かなり特殊で複雑な使い方をしているので、slimな使い方を調べてみました。

ちなみに、slimという名前は一般的な名前な為か、GAE用のフレームワークだとかテンプレートエンジンにも同じ名前のものがあるようです。

導入

Slimを見ると

<?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

require 'vendor/autoload.php';

$app = new \Slim\App;
$app->get('/hello/{name}', function (Request $request, Response $response) {
    $name = $request->getAttribute('name');
    $response->getBody()->write("Hello, $name");

    return $response;
});
$app->run();

というように書いてありますが、もう少し下の

$ php composer.phar create-project slim/slim-skeleton [my-app-name]

から始めるとよさそうです。
ちなみに、これで始めた場合のディレクトリ構成は

$ tree -L 2
.
├── CONTRIBUTING.md
├── README.md
├── composer.json
├── composer.lock
├── logs
├── phpunit.xml
├── public
│   └── index.php
├── src
│   ├── dependencies.php
│   ├── middleware.php
│   ├── routes.php
│   └── settings.php
├── templates
│   └── index.phtml
├── tests
│   └── Functional
└── vendor
    ├── autoload.php
    ├── bin
〜以下、ライブラリ

というような感じになります。

後は、以下書いてあるとおり、

$ php -S 0.0.0.0:8080 -t public public/index.php

で、webサーバが立ち上がるので、このまま開発も出来ます。

ディレクトリ構成

composer.jsonの内容はこんな感じ

composer.json
{
    "name": "slim/slim-skeleton",
    "description": "A Slim Framework skeleton application for rapid development",
    "keywords": ["microframework", "rest", "router", "psr7"],
    "homepage": "http://github.com/slimphp/Slim-Skeleton",
    "license": "MIT",
    "authors": [
        {
            "name": "Josh Lockhart",
            "email": "info@joshlockhart.com",
            "homepage": "http://www.joshlockhart.com/"
        }
    ],
    "require": {
        "php": ">=5.5.0",
        "slim/slim": "^3.1",
        "slim/php-view": "^2.0",
        "monolog/monolog": "^1.17"
    },
    "require-dev": {
        "phpunit/phpunit": ">=4.8 < 6.0"
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },
    "scripts": {
        "start": "php -S 0.0.0.0:8080 -t public public/index.php",
        "test": "phpunit"
    }
}

見ての通りphpunitが導入してあるので、

$ php composer.phar test

で、初期のルーティングのテストも出来ます。
もっとも、このままだと自前のクラスなどが使えないので、こんな感じに付け加えておくといいのではないでしょうか?

composer.json
    "autoload": {
        "psr-4": {
            "Achme\\": "src/achme/classes"
        }
    },

ちなみに、Achmeというのは、(諸説あるらしいですが)ある映画に出てくる会社の名前のようです。
恐らく、ドメイン名のexample.comと同じ意味合いで使用されているのではないでしょうか?
もっとも、FuelPHPなど他のフレームワークなどではAppを使用しているので、Appとするのが一般的かもしれません。

PHPMDの導入

$ php composer.phar require --dev phpmd/phpmd

こうしておくと、PHPMDの導入が出来ます。

composer.json
    "scripts": {
        "start": "php -S 0.0.0.0:8080 -t public public/index.php",
        "test": "phpunit",
        "phpmd": "phpmd src/ text cleancode,codesize,controversial,design,naming,unusedcode"
    }

まだ自分でルールセットを作るような事は出来ていませんが、プロジェクトでルールセットを導入しておくと開発がスムーズに進めそうです。

10
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
12