Symfony 2.7入門 その1 インストールとHello World

Symfony 2.7入門です。

Symfonyは、現在のPHPフレームワークの中で最も使われているものの1つです。 特徴としては、

  • 徹底した疎結合の設計思想
  • 部品の再利用性が高い
  • ソースコードが読みやすい
  • 世界的にユーザが多い
  • 柔軟性が高い

などがあるかと思います。

個人的な感想としては上記に加えて 「クセが少ない」というのがあると思います。つまり汎用的であるということです。

Symfonyで学んだ知識や哲学は、他のフレームワークや他の言語で開発するときにもきっと役にたつことでしょう。

想定読者と推奨環境

  • PHPは少し使えるけどSymfonyは初めてという方を対象にしています。
  • Linux/Unixの基本的なコマンドは使えることを想定しています。
  • 動作環境はLinux及びMacです。(Windowsの方はVagrant等の仮想環境を使ってください)
  • PHP5.4以上のバージョンを推奨します。

Symfonyコマンドをインストール

まずsymfonyコマンドをインストールします。 これは、Symfony Installer と言って、プロジェクトのセットアップを自動化してくれるツールです。

インストールと言ってもファイル1個落としてくるだけです。 下記例では/usr/locl/bin/ にインストールします。パスの通った場所ならどこでもかまいません。

$ curl -LsS http://symfony.com/installer > symfony.phar
$ sudo mv symfony.phar /usr/local/bin/symfony
$ chmod a+x /usr/local/bin/symfony

下記を実行してバージョン情報が表示されたらOKです。

$ symfony  --version
Symfony Installer version 1.1.7

プロジェクト作成

このsymfonyコマンドを使ってプロジェクトを自動作成することができます。

$ cd /tmp/
$ symfony new myproject

このコマンドはSymfonyの最新安定版をもとにプロジェクトのひな形をmyprojectディレクトに作成してくれます。

ビルトインサーバを起動して動作確認

早速起動してみましょう。

$ cd myproject
$ php app/console server:run
php app/console server:run
Server running on http://127.0.0.1:8000

Quit the server with CONTROL-C.

起動したら、ブラウザで http://localhost:8000 にアクセスしてみましょう。

‘No route found for “GET /”’ みたいなエラー画面が表示されたと思います。 これは、そのURLに対するアクションが未定義のときに出るエラーです。 正しい挙動なので安心してください。

次に、 http://localhost:8000/app/example にアクセスしてください。 真っ白な画面に

Homepage.

と表示されるはずです。

これで、Symfonyのインストールと起動は成功です。

(なお、本番環境ではapp/console server:runは使いません。これはあくまで開発用簡易サーバです)

app/example にアクセスしたときに何が起こっているのか

http://localhost:8000/app/exampleにアクセスしたときに内部で何が起こっているのでしょうか?

答えを先に言うとmyprojectの下のsrc/AppBundle/Controller/DefaultController.phpというファイルが実行されます。

こんなコードです。

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class DefaultController extends Controller
{
    /**
     * @Route("/app/example", name="homepage")
     */
    public function indexAction()
    {
        return $this->render('default/index.html.twig');
    }
}

/app/exampleというURLにアクセスすると、上記のindexAction()というメソッドが呼び出されます。 indexActionはtwigのテンプレートファイルを使ってHTMLコンテンツを生成し、それをレスポンスとして返します。

挙動を変えてみよう

さてこれだけでは面白くないので挙動を変えてみましょう。

twigファイルをいじってもよいのですが、せっかくSymfonyを使っているので生のレスポンスオブジェクトを返してみましょう。

src/AppBundle/Controller/DefaultController.php を編集します。

+ use Symfony\Component\HttpFoundation\Response;
class DefaultController extends Controller
{
    /**
     * @Route("/app/example", name="homepage")
     */
    public function indexAction()
    {
-        return $this->render('default/index.html.twig');
+        return new Response('hello DQNEO');
    }
}

編集後、ブラウザでhttp://localhost:8000/app/exampleにアクセスすると、今度は

hello DQNEO

という文字列が画面に表示されると思います。

こんな感じで、

  • あるURLにアクセスする
  • あるルールに従ってコントローラクラスのアクションメソッドが呼び出される
  • アクションメソッドは、レスポンスを生成してreturnする
  • そのレスポンスがクライアント(=ブラウザ)に送信される

これがSymfonyの基本動作です。

カテゴリ: