hello foo bar Saba note | Symfony2のインストール

Symfony2のインストール

2017.1.18 (水)

composerの入手

$ curl -s http://getcomposer.org/installer | php

composerからsymfony2をインストール

$ php composer* create-project symfony/framework-standard-edition [インストールするフルパス]

インストールするパスに絶対パスを指定したらうまくいかなかったので、カレントディレクトリにとりえず落として、各プロジェクトの場所に移動させました。またディレクトリは空のものを用意しておかないと駄目みたいですね。
そもそもcurlが使えない場合、うまくcomposerが作動しない場合は、普通にダウンロードしてサーバーにあげます。
9.4MBあったのでそこそこの大きさではありますが、Wordpressが6.8MBなのでそこらのCMSと同じぐらいです。ダウンロードしてい解凍したらドキュメントルートで設定したWebサーバーにアップロードします。チュートリアルでは、http://www.example.com/symfony/以下にダウンロードするように指示されます。

composerがなくてもダウンロードして設定することもできます。
ダウンロードはこちら。通常Standerd Editionからはじめるとよいと思います。(2017-01-18時点で安定版はSymfony Standard 2.8です。)

本家に行ってみたら新しいインストール方法というか専用のインストーラーがありました。こっちの方がめっぽう楽です。

$ php -r "file_put_contents('symfony', file_get_contents('https://symfony.com/installer'));"
$ php symfony new PROJECT_DIR

これだけでOKでした。

インストール後のデフォルトでは、

.gitignore
LICENSE
README.md
app/
bin/
composer.json
composer.lock
composer.phar
phpunit.xml.dist
src/
tests/
var/
vendor/
web/

こんな風になってます。フレームワークっぽいです。

DocumentRootの設定など

例にもれずSymfony2もindex.phpがすべてのリクエストを受けるので、

app/web/

にDocumentRootの設定をします。うまくいけばSymfony2の初期画面が表示されます。

symfony2


本番環境はapp.phpで受けて、開発環境はapp_dev.phpでリクエストを受けます。app_dev.phpの方はIP制限をしているので、問題なければIP制限の部分はコメントアウトしてもよいかと思います。

// app/web/app_dev.php
// 以下コメントアウトする
//if (isset($_SERVER['HTTP_CLIENT_IP'])
//    || isset($_SERVER['HTTP_X_FORWARDED_FOR'])
//    || !(in_array(@$_SERVER['REMOTE_ADDR'], ['127.0.0.1', '::1']) || php_sapi_name() === 'cli-server')
//) {
//    header('HTTP/1.0 403 Forbidden');
//    exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.');
//}

http://example.com/app_dev.php/でもアクセスできるようになります。

インストール後にやること

システムチェック

むかしはsymfonyのディレクトリ直下にあったと思ったんですが、最近はvendorの中にいっちゃったんですね。

$ php ./app/vendor/sensio/distribution-bundle/Resources/skeleton/app/check.php

結果はこんな感じになります。諸々足りない設定を指摘してくれます。

Symfony Requirements Checker
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

> PHP is using the following php.ini file:
  /usr/local/php/5.5/etc/php.ini

> Checking Symfony requirements:
  .EEE..........W.......................


 [ERROR]
 Your system is not ready to run Symfony projects


Fix the following mandatory requirements
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 * Vendor libraries must be installed
   > Vendor libraries are missing. Install composer following
   > instructions from http://getcomposer.org/. Then run "php
   > composer.phar install" to install them.

 * app/cache/ or var/cache/ directory must be writable
   > Change the permissions of either "app/cache/" or  "var/cache/"
   > directory so that the web server can write into it.

 * app/logs/ or var/logs/ directory must be writable
   > Change the permissions of either "app/logs/" or  "var/logs/"
   > directory so that the web server can write into it.


Optional recommendations to improve your setup
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 * Vendors should be installed in order to check all requirements.
   > Run the "composer install" command.


Note  The command console could use a different php.ini file
~~~~  than the one used with your web server. To be on the
      safe side, please check the requirements from your web
      server using the web/config.php script.

そもそものシステム要件はこちらに書いてあります。
でいちばん下のNoteというところにweb/config.phpを叩けということなので(場合によっては該当ファイルのlocalhost以外のアクセス禁止みたいなコードだけコメントアウトして)チェックしてみます。いろいろいわれるけどちゃんと動いてそうだったらRecommendは無視して大丈夫です。(本番化する際にはちゃんとしておきたいところです。)

バージョン確認

$ bin/console -V
Symfony version 3.1.6 - app/dev/debug

開発用(dev)アプリとプロダクト用(prod)アプリ

Symfony2は本番用と開発用のアプリを予め用意しているのですが、これが結構適当でURIを出し分けるだけです。開発モードでいくとかの有名なプロファイラーというデバックツールが使えたりします。

http://www.example.com/PATH [本番]
http://www.example.com/app_dev.php/PATH [開発]

これらのapp.php、app_dev.phpはデフォルトではlocalhost以外のアクセスは禁止している筈なので、その行をコメントアウトしてあげないと動かないことがあります。

//if (isset($_SERVER['HTTP_CLIENT_IP'])
//    || isset($_SERVER['HTTP_X_FORWARDED_FOR'])
//    || !(in_array(@$_SERVER['REMOTE_ADDR'], ['127.0.0.1', '::1']) || php_sapi_name() === 'cli-server')
//) {
//    header('HTTP/1.0 403 Forbidden');
//    exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.');
//}

実際の本番化の際は、web/app.phpの中ほどにある

$kernel = new AppKernel('prod', false);

のところを「false → true」に修正します。そうするとちゃんとしたパスでアクセスすることが可能になります。

DBの設定

DBはどうせ使うので設定しておいた方がいいでしょう。app/config/parameters.ymlに書きます。送信メールサーバーの情報もここに書きます。

タイムゾーンの設定

Symfony2はそのままにしているとなぜだかtimezoneはヨーロッパになっております。なので日本時間に設定してあげます。AppKernel.phpのコンストラクタにタイムゾーンを設定してあげます。

// app/app/AppKernel.php
// 2017-03-20 timezone
public function __construct($environment, $debug)
{
    date_default_timezone_set('Asia/Tokyo');
    parent::__construct($environment, $debug);
}

いろいろセットアップできたらいろいろやる。
http://tech.quartetcom.co.jp/category/symfony2-intro/