読者です 読者をやめる 読者になる 読者になる

「基本からしっかり学ぶ Symfony2 入門」メモ(2)

「基本からしっかり学ぶ Symfony2 入門」を買った。

基本からしっかり学ぶ Symfony2入門

基本からしっかり学ぶ Symfony2入門

基本からしっかり学ぶ Symfony2入門:書籍案内|技術評論社

hidenorigoto/symfony2-book: 基本からしっかり学ぶSymfony2入門 サポートサイト

6-2 管理者用画面の実装

「お問い合わせエンティティへの管理フィールドの追加」で、 Inquiryprocess_statusprocess_memoを追加するところでエラーとなった。

> php.exe C:\Users\ishida\PhpstormProjects\classic-symfony\bin\console doctrine:schema:update --force
Updating database schema...

  [Doctrine\DBAL\Exception\NotNullConstraintViolationException]
  An exception occurred while executing 'ALTER TABLE inquiry ADD process_stat
  us VARCHAR(20) NOT NULL':
  SQLSTATE[23502]: Not null violation: 7 ERROR:  列"process_status"にはNULL値
  があります



  [Doctrine\DBAL\Driver\PDOException]
  SQLSTATE[23502]: Not null violation: 7 ERROR:  列"process_status"にはNULL値
  があります



  [PDOException]
  SQLSTATE[23502]: Not null violation: 7 ERROR:  列"process_status"にはNULL値
  があります


doctrine:schema:update [--complete] [--dump-sql] [-f|--force] [--em [EM]] [-h|--help] [-q|--quiet] [-v|vv|vvv|--verbose] [-V|--version] [--ansi] [--no-ansi] [-n|--no-interaction] [-e|--env ENV] [--no-debug] [--] <command>


Process finished with exit code 1 at 21:06:39.
Execution time: 858 ms.

process_status, process_memoはNOT NULLだが、この時点で既にレコードが挿入されていたため。

それぞれデフォルト値を指定することにした。

     * @ORM\Column(name="process_status", type="string", length=20, options={"default":"0"})
...
     * @ORM\Column(name="process_memo", type="text", options={"default":""})

7-1 データフィクスチャ

app/consoleの実行にPhpStormのCommand Line Tool Supportを使っていたのだが、doctrine/doctrine-fixtures-bundleをインストールして新しいコマンドを追加したときは、コマンド一覧のリロードが必要となる。

f:id:iakio:20160220213631p:plain

7-2 CSVダウンロード機能の作成

何故Write::createFromString(",")と引数にカンマを渡しているのだろうと疑問に思っていたのだけれど、サンプルコードを見て意味が分かった。これはダブルクォートじゃなくてシングルクォート2つだった。

つまり、

  • Write::createFromString(",")と、カンマを渡しているように見えたが
  • Write::createFromString('', '')と、空文字を2つ渡していた

買ったのはKindle版。紙の本では見ていない。

7-4 APIの作成

この本は全体的にSymfony以外の部分については、よく言えばシンプルに書いてある。Concertの設計がdate:datetime:timeというのはなかなか大胆。

「ちょっとした確認用にテストコマンドを用意しておくと便利」はとても良いアドバイスだと思う。