こんにちは!Symfonyアドベントカレンダー 6日目です :christmas_tree::crescent_moon:

初参戦です!よろしくお願いします :bow:

さて、私自身Symfonyを使い始めて早5ヶ月が経ちました。そこで、よく使っている便利なSymfonyコマンドを紹介しようと思います。

初心者向けですが、もしかしたら知らないコマンドがあるかもしれません!新しい発見があると嬉しいです :muscle:

※ Symfony4用に bin/consoleとしていますが、app/consoleに置き換えれば大体がSymfony2でも使えると思います。

おなじみ系

まずは、Symfonyを使う上で絶対通るであろう「おなじみ系」コマンドです。

「なんか、更新されないなー」ってときは、とりあえずcache:clearしてます。 (省略してc:cでもできちゃいます)

$ bin/console cache:clear …キャッシュを削除する

$ bin/console list または $ bin/console …使用可能コマンド一覧を表示する(設定ファイルにエラーがないかの確認にも使えます :ok_woman:

lint系

次に、ファイルの構文チェックをしてくれる「lint系」コマンドです。

オフライン環境でブラウザチェックができない時には、使えるコマンドだと思います。

$ bin/console lint:yaml [file_name] …yamlファイルのlintチェックをする

  • NGな時(下記エラーでは、1行目のインデントがおかしいのが一目瞭然ですね)
$ bin/console lint:yaml config/routes.yaml

  ERROR  in config/routes.yaml
  >> Unable to parse at line 1 (near "   index:").


 [WARNING] 0 YAML files have valid syntax and 1 contain errors.

  • OKな時
$ bin/console lint:yaml config/routes.yaml

 [OK] All 1 YAML files contain valid syntax.

$ bin/console lint:twig [file_name] …twigファイルのlintチェックをする

  • NGな時
$ bin/console lint:twig templates/base.html.twig

  ERROR  in templates/base.html.twig (line 5)
      3          <head>
      4              <meta charset="UTF-8">
  >>  5              <title>Welcome!{% endblock %}</title>
  >> Unknown "endblock" tag.
      6              {% block stylesheets %}{% endblock %}
      7          </head>

OKな時は、link:twigと同じような感じです。

debug系

次は、「debug系」コマンドです。

新たにサービスやパラメータ、ルートを登録した際に、きちんと意図した通り登録できているかをチェックする時に私はよく使います。

他にも、パス → 該当コントローラクラスまたはその逆を調べる時などに便利です。

$ bin/console debug:container [sevice_id] …サービスID → サービス情報(クラスなど)を確認する

$ bin/console debug:container doctrine.orm.entity_manager

 // This service is a public alias for the service doctrine.orm.default_entity_manager

Information for Service "doctrine.orm.default_entity_manager"
=============================================================

 The EntityManager is the central access point to ORM functionality.

 ---------------- -------------------------------------
  Option           Value
 ---------------- -------------------------------------
  Service ID       doctrine.orm.default_entity_manager
  Class            Doctrine\ORM\EntityManager
  Tags             -
  Public           yes
  Synthetic        no
  Lazy             yes
  Shared           yes
  Abstract         no
  Autowired        no
  Autoconfigured   no
  Factory Class    Doctrine\ORM\EntityManager
  Factory Method   create
 ---------------- -------------------------------------

$ bin/console debug:container --parameter=[parameter_name] …パラメータ値を取得する

$ bin/console debug:container --parameter=kernel.cache_dir
 ------------------ -------------------------------------------------------
  Parameter          Value
 ------------------ -------------------------------------------------------
  kernel.cache_dir   /path/to/project/var/cache/dev
 ------------------ -------------------------------------------------------

$ bin/console debug:route [route_name] …ルート名 → パスやメソッド、クラスを確認する

$ bin/console debug:route _twig_error_test
+--------------+--------------------------------------------------------------------+
| Property     | Value                                                              |
+--------------+--------------------------------------------------------------------+
| Route Name   | _twig_error_test                                                   |
| Path         | /_error/{code}.{_format}                                           |
| Path Regex   | #^/_error/(?P<code>\d+)(?:\.(?P<_format>[^/]++))?$#sDu             |
| Host         | ANY                                                                |
| Host Regex   |                                                                    |
| Scheme       | ANY                                                                |
| Method       | ANY                                                                |
| Requirements | code: \d+                                                          |
| Class        | Symfony\Component\Routing\Route                                    |
| Defaults     | _controller: twig.controller.preview_error::previewErrorPageAction |
|              | _format: html                                                      |
| Options      | compiler_class: Symfony\Component\Routing\RouteCompiler            |
|              | utf8: true                                                         |
+--------------+--------------------------------------------------------------------+

$ bin/console router:match router:match [path] …パス → ルート名やメソッド、クラスを確認する

$ bin/console router:match /_error/123.csv



 [OK] Route "_twig_error_test" matches


+--------------+--------------------------------------------------------------------+
| Property     | Value                                                              |
+--------------+--------------------------------------------------------------------+
| Route Name   | _twig_error_test                                                   |
| Path         | /_error/{code}.{_format}                                           |
| Path Regex   | #^/_error/(?P<code>\d+)(?:\.(?P<_format>[^/]++))?$#sDu             |
| Host         | ANY                                                                |
| Host Regex   |                                                                    |
| Scheme       | ANY                                                                |
| Method       | ANY                                                                |
| Requirements | code: \d+                                                          |
| Class        | Symfony\Component\Routing\Route                                    |
| Defaults     | _controller: twig.controller.preview_error::previewErrorPageAction |
|              | _format: html                                                      |
| Options      | compiler_class: Symfony\Component\Routing\RouteCompiler            |
|              | utf8: true                                                         |
+--------------+--------------------------------------------------------------------+

$ bin/console debug:twig --filter=[word] …twigで使える関数を確認する

例) twigでdump関数が使えるのかを知りたい → dump()が表示されたので使えそうですね :bulb:

$ bin/console debug:twig --filter=dump

Functions
---------

 * dump()
 * profiler_dump(data, maxDepth = 0)
 * profiler_dump_log(message, context = null)

...

doctrine系

最後に、「doctrine系」コマンドです。

$ bin/console doctrine:schema:validate …エンティティとDBが同期されているかを調べる

  • 同期されている時
$ bin/console doctrine:schema:validate

Mapping
-------


 [OK] The mapping files are correct.


Database
--------


 [OK] The database schema is in sync with the mapping files.

  • DBが同期されていない時
$ php bin/console doctrine:schema:validate
              
Mapping
-------

                                                                                                                      
[OK] The mapping files are correct.                                                                                    
                                                                                                                      

Database
--------

                                                                                                                      
[ERROR] The database schema is not in sync with the current mapping file.
  

$ php bin/console doctrine:schema:update …エンティティとDBを同期する、差分を確認する

  • エンティティとDBを同期する前に、差分(SQL)を確認したい時
$ php bin/console doctrine:schema:update  --dump-sql

 The following SQL statements will be executed:

     CREATE TABLE user (id INT AUTO_INCREMENT NOT NULL, email VARCHAR(180) NOT NULL, ...

  • 強制的に同期したい時
$ php bin/console doctrine:schema:update  --force

 Updating database schema...

     1 query was executed

                                                                                                                        
 [OK] Database schema updated successfully!                                                                             
                                                                                                                        

さいごに

いかがでしたでしょうか、全部知っていたらごめんなさいw

よく使うけど覚えられないものはエイリアスを作ったりして、日々の業務の効率化につながればいいなと思います :pray:

カスタムで自分だけのコマンドを作るも楽しそうですね:sunglasses: