|
| 1 | +.. index:: |
| 2 | + single: Override Symfony |
| 3 | + |
| 4 | +.. note:: |
| 5 | + |
| 6 | + * 対象バージョン:2.3 |
| 7 | + * 翻訳更新日:2013/11/26 |
| 8 | + |
| 9 | + |
| 10 | +Symfony のディレクトリ構造をカスタマイズする方法 |
| 11 | +===================================================== |
| 12 | + |
| 13 | +Symfony には最初からデフォルトのディレクトリ構造があります。このディレクトリ構造は開発者が好きなように変更することができます。 |
| 14 | +デフォルトのディレクトリ構造は下記のようになっています。 |
| 15 | + |
| 16 | +.. code-block:: text |
| 17 | +
|
| 18 | + app/ |
| 19 | + cache/ |
| 20 | + config/ |
| 21 | + logs/ |
| 22 | + ... |
| 23 | + src/ |
| 24 | + ... |
| 25 | + vendor/ |
| 26 | + ... |
| 27 | + web/ |
| 28 | + app.php |
| 29 | + ... |
| 30 | +
|
| 31 | +.. _override-cache-dir: |
| 32 | + |
| 33 | +``cache`` ディレクトリを変更する |
| 34 | +-------------------------------- |
| 35 | + |
| 36 | +キャッシュのディレクトリは、アプリケーションの ``AppKernel`` クラスの ``getCacheDir`` をオーバーライドすることにより変更できます。:: |
| 37 | + |
| 38 | + // app/AppKernel.php |
| 39 | + |
| 40 | + // ... |
| 41 | + class AppKernel extends Kernel |
| 42 | + { |
| 43 | + // ... |
| 44 | + |
| 45 | + public function getCacheDir() |
| 46 | + { |
| 47 | + return $this->rootDir.'/'.$this->environment.'/cache'; |
| 48 | + } |
| 49 | + } |
| 50 | + |
| 51 | +``$this->rootDir`` は ``app`` ディレクトリへの絶対パスで、 ``$this->environment`` は現在の環境です(例えば、 ``dev`` のような) |
| 52 | +上の例では、キャッシュのディレクトリを ``app/{environment}/cache`` に変更しています。 |
| 53 | + |
| 54 | +.. caution:: |
| 55 | + |
| 56 | + ``cache`` ディレクトリは各環境ごとに別々にしておかなくてはいけません。さもないと、予想できない挙動となることがあります。 |
| 57 | + 各環境にはそれぞれの設定ファイルのキャッシュを生成するため、キャッシュファイルを保存するために他とは違うディレクトリが必要なのです。 |
| 58 | + |
| 59 | +.. _override-logs-dir: |
| 60 | + |
| 61 | +``logs`` ディレクトリを変更する |
| 62 | +------------------------------- |
| 63 | + |
| 64 | +``logs`` ディレクトリを変更する方法は、 ``cache`` ディレクトリを変更するのと同じですが、オーバーライドするメソッドは ``getLogDir`` です。:: |
| 65 | + |
| 66 | + // app/AppKernel.php |
| 67 | + |
| 68 | + // ... |
| 69 | + class AppKernel extends Kernel |
| 70 | + { |
| 71 | + // ... |
| 72 | + |
| 73 | + public function getLogDir() |
| 74 | + { |
| 75 | + return $this->rootDir.'/'.$this->environment.'/logs'; |
| 76 | + } |
| 77 | + } |
| 78 | + |
| 79 | +上の例ではディレクトリのパスを ``app/{environment}/logs`` に変更しています。 |
| 80 | + |
| 81 | +``web`` ディレクトリを変更する |
| 82 | +------------------------------ |
| 83 | + |
| 84 | +``web`` ディレクトリのパスを変更したり移動したりする必要があるなら、フロントコントローラーである ``app.php`` と ``app_dev.php`` にある ``app`` ディレクトリのパスが正しく保たれているだけで大丈夫です。 |
| 85 | +単に web ディレクトリのディレクトリ名を変更しただけであれば、そのままで構いません。しかし、もしどこかに移動したのなら、フロントコントローラーに含まれるパスを変更しなければなりません。:: |
| 86 | + |
| 87 | + require_once __DIR__.'/../Symfony/app/bootstrap.php.cache'; |
| 88 | + require_once __DIR__.'/../Symfony/app/AppKernel.php'; |
| 89 | + |
| 90 | +更に、 ``composer.json`` にある ``extra.symfony-web-dir`` オプションも変更しなければならないでしょう。 |
| 91 | + |
| 92 | +.. code-block:: json |
| 93 | +
|
| 94 | + { |
| 95 | + ... |
| 96 | + "extra": { |
| 97 | + ... |
| 98 | + "symfony-web-dir": "my_new_web_dir" |
| 99 | + } |
| 100 | + } |
| 101 | +
|
| 102 | +.. tip:: |
| 103 | + |
| 104 | + 共有ホスティングでは ``public_html`` が公開ディレクトリとして使われることがあります。 ``web`` ディレクトリを ``public_html`` にリネームするのは、共有ホスティングで Symfony プロジェクトを動かす方法の一つです。 |
| 105 | + 別の方法として、アプリケーションを公開ディレクトリ外にデプロイし、 ``public_html`` を削除して、アプリケーションの ``web`` ディレクトリへのシンボリックリンクに置き換えてしまうという方法もあります。 |
| 106 | + |
| 107 | +.. note:: |
| 108 | + |
| 109 | + AsseticBundle を使っている場合は、バンドルが ``web`` ディレクトリを正しく使えるように下記の設定も必要です。 |
| 110 | + |
| 111 | + .. configuration-block:: |
| 112 | + |
| 113 | + .. code-block:: yaml |
| 114 | +
|
| 115 | + # app/config/config.yml |
| 116 | +
|
| 117 | + # ... |
| 118 | + assetic: |
| 119 | + # ... |
| 120 | + read_from: "%kernel.root_dir%/../../public_html" |
| 121 | +
|
| 122 | + .. code-block:: xml |
| 123 | +
|
| 124 | + <!-- app/config/config.xml --> |
| 125 | +
|
| 126 | + <!-- ... --> |
| 127 | + <assetic:config read-from="%kernel.root_dir%/../../public_html" /> |
| 128 | +
|
| 129 | + .. code-block:: php |
| 130 | +
|
| 131 | + // app/config/config.php |
| 132 | +
|
| 133 | + // ... |
| 134 | + $container->loadFromExtension('assetic', array( |
| 135 | + // ... |
| 136 | + 'read_from' => '%kernel.root_dir%/../../public_html', |
| 137 | + )); |
| 138 | +
|
| 139 | + 設定を変更したら、再度アセットをダンプするだけで、アプリケーションを使うことができます。 |
| 140 | + |
| 141 | + .. code-block:: bash |
| 142 | +
|
| 143 | + $ php app/console assetic:dump --env=prod --no-debug |
| 144 | +
|
| 145 | +
|
| 146 | +.. 2013/12/09 77web 1f7898045f3f1ad06dc63f32f4d921519fc5e3d7 |
0 commit comments