default.ctpP51の記事の中で書き間違い発見。本には以下の記述がありますがこのすべてのページの土台となるデザインは、cake/libs/view/templates/layouts/default.ctpの中に書き込まれています。上記ディレクトリにはありませんでした。正確にはcake/libs/view/layouts/default.ctpでした。コードがおかしいのでしょうか...cakeErrorP76にある「cakeError」の項目が若干分かりにくかったです。連想配列);本では「app/AppError.php」を作成すると拡張できるとあって、その下にcakeErrorを使ったと思われるサンプルview画面が載ってましたが、具体的な書き方は載ってませんでした。Viewの作成サンプルアプリケーションの制作は実際動いている画面が見られるのでほんとに楽しい項目なのですが、P92のViewのXHTML作成でlogin.ctpをコーディングする箇所で若干間違いがありました。value="ログイン">これはXHTMLなので以下が正解ですね。inputタグはインライン要素なので終了タグを付加しないといけません。なんでだろう?flashメソッドを呼んだ際に表示されるページで文字化けが起こっています。この文字列はusers_controller.phpに記述されているものなので、確認のために文字コードを調べてみると「Shift_JIS」になっちゃってました。うーん、bakeでControllerを作ってしまうと標準で「Shift_JIS」になってしまうようです。あとでテキストエディターなどで「UTF-8N」に変換してあげるとちゃんと文字化けしないで表示されるようになりました。セッションを利用した認証機能の実装例いやー、ここの認証機能の簡単さもすばらしいですね。自力で書いていたのがアホらしく感じるほど。ここも本どおりにいかないところがありました。ログインが成功した後のP99の画面ですが、これは/app/config/core.phpのデバッグの値を0にしておかないと画面遷移しないですね。(ここの2を0にします)ところで画面下のクエリー情報はデバッグの値が0だと表示されないので、どうやっているのか謎です。...と思ったら、$this->flash()で表示された画面は、タイトル部分をクリックすると指定のURLに遷移するのですね。ログイン中のユーザー情報を元にした処理ここもViewの文字化けで悩みました。P100のapp/views/bookmarks/index.ctpですが、最初に文字コードを変更しようとTeraPadを使ってUTF-8Nに変換したのですが、何度やってもShift_JISのまま。埒があかないので、コーディングだけ先にやって表示だけさせてみました。すると、案の定文字化け。index.ctpの内容がXHTMLベースのシンプルなものになったので、再度TeraPadで開いてUTF-8Nに変換。すると、文字化けが直りました。Viewはいずれ変更するのでこのような問題はあまり起こらないのでしょうが、本を見ながら学んでいる人にはけっこう精神的にまいる所かもしれません。find(‘all’)の使用例3(関数の実行例)」で見慣れない記述が出てきたので戸惑いました。Modelで条件を指定してfind()で取り出ししているところです。$this->Bookmark->find('all',$param);$this->set("data",$data);//集計結果をメッセージ表示領域へ格納$this->Session->setFlash(var_export($data[0][0],true);2行目までは分かるのですが、最後の行がなんなのか分かりません。setFlash()って?調べてみると$this->Session->setFlash()は画面に一瞬表示させるメッセージをセットする命令であるということです。'flash')ビューで出力するために使用するセッション変数をセットします。あるものを指定することで、メッセージを表示する時にどのレイアウトを使用するかをコントロールできます。「default」のままにしておいた場合、メッセージは次のコードでラップされます。表示されるレイアウトに追加のビュー変数を渡すことができます。インデックスをセットします。デフォルトは「flash」です。タグに影響を与えることができます。データバリデーションここでは、例として名前(name)とメールアドレス(mail)とパスワード(password)の入力の正当性をチェック(validate)するモデルがコード例で出ています。その中でエラーメッセージを設定している箇所があるのですが、ControllerやViewではどうするのかが書かれていませんでした。ここはModelを説明しているところなので詳しく書いても混乱すると考えたのでしょうけど、「ControllerやViewについては後で説明するので省略します」等の安心感を与える記述があっても良かったのでは、と思いました。P142の「validates()」を呼び出しているところ。$ths->モデル名->validates()ここは$this->モデル名->validates()ですね。ブックマーク登録機能の作成ここは本に従ってゴリゴリと作っていくところですが、validates()の箇所で間違いを発見。{...これが正しいですね。P142のコード例でも引数なしで記述してありますから。あれ?Viewで警告メッセージが...P150でView用のapp/views/bookmarks/add.ctpを作成したのですが、フォームを表示させると表示にエラーが出てしまいました。フォームに$urlの内容を表示させる部分で「そんな変数ないよ」というエラーが出ているようです。見てみると以下のコードが該当する箇所です。/>ここの$url変数はController(app/contollers/bookmarks_controller.php)ではvalidates()で失敗した後に$this->set()で設定してあるのですが、最初にフォームを表示させた時点は設定されていないことになります。フォームでは値が設定されていることを確認した上で表示させないといけないですね。いうわけで上記のコードを修正してみました。/>これで警告が出なくなりました。ま、先が分からないのでこのまま進みましょう。search()メソッドの中で、ユーザーのリストを取得する部分。$this->User->find('list');ここでエラーが出てました。$this->Bookmark->User->find('list');とするのが正解のようです。これで無事エラーがなくなりました。ここは分からない人には分からない箇所なので、致命的な間違いかもしれません。技術書ってこういうところがあるから書くのが難しいですよね。Amazonのブックレビューでもよく指摘されたりしますし。しつこくXHTMLの指摘P153の検索フォームでのコーディングでXHTML式になっていない箇所を2箇所発見。?></select></td>以下のように属性がちゃんと「(属性名)=(属性値)」になるようにします。DBテーブルを使わない場合にも使えますか?P157で誤字発見。「$useTalbe=falseを設定して」のところは「$useTableを設定して」の間違いですね。Form誤字が多いFormヘルパーの表...なんだかここに来て急に誤字が目立ってきました。Formヘルパーの主な機能概要」の所ですが、まず「input」の項目。「iinputタグを出力する」は「inputタグを出力する」の間違い。次に「textarea」の項目。「ファイルアップロード欄を出力する」とありますが、これは「テキストエリア欄を出力する」の間違い。説明する行が間違ってます...次の行の「fle」の項目。これは「file」ですね。説明が「テーブルセルtdを生成する」って...、これは「ファイルアップロード欄を出力する」ですね。P163の表をコピペしたのがバレバレですね...ヘルパーの利用ここでは、ページの表示を行うための便利なオブジェクトの紹介とそのコーディング方法について記述されています。この部分については実際の作業現場にて思うところがあるのでちょっと語りますね。ヘルパーはGUIデザインなどを行うWebデザイナーやHTMLやCSSをコーディングするコーダーと、プログラマーとの連携作業において、若干Webデザイナーに面倒を強いる部分があるのではないかと考えています。実際に表示させるまで想像できないページの見栄えHTMLコーディングを行うWebデザイナーの中には当然プログラマーじゃない人もいるわけで、プログラマーと平行作業を行う場合、アンケート入力フォームを例に挙げるとコーディングなどは作業効率上Webデザイナー側が行う場合がほとんどではないかと思います。この場合に「こういうフォームデザインをやりたい」とWebデザイナーが思ったときにヘルパーを利用するルールになっているとHTMLコードではなくPHPコードを埋め込まないといけないので、実行時に生成されるHTMLコードをWebデザイナーが事前に想定してデザインしにくいというストレスが発生します。ヘルパーにはオプションを指定する部分もあって、そこでclass名などを指定できるようですが、それはすでにPHPの領域であって、Webデザイナーがプログラマーの作業に関わらざるを得ない状況です。一人で全部開発をやってしまう場合は全体を把握できているので問題ないかもしれませんが、Webデザイナーやプログラマー双方のコンテンツの変更というのは実際の開発中に思った以上に発生するものですから、この役割分担できる部分というのは極力粗結合な状態を保つのが良いです。Smartyのススメこの部分について良い解決法としては、やはりSmartyの活用が適切なのではないかと個人的に考えています。Smartyであれば基本的にHTMLコードやCSSなどはWebデザイナーの領分として書き進めることができるので、連携という意味では「デザイナー向けのSmarty構文のみを知っていれば良い」という粗結合の関係にすることができます。Smartyを利用したプロジェクトでは私がコントローラー(C)を書きつつ、横でプログラムが分からないコーダーの人が私に関係なくコーディング(V)を進めて、結合テストがスムーズにいくことが少なくありません。本格的に活用していないので「いやいや、プログラマーとWebデザイナーでもCakePHPだけでうまく連携できるよ」という方もいらっしゃるかもしれません。その場合はぜひノウハウを共有させていただければと思います。ちなみにこの本では後半にちゃんとSmartyと連携するための方法が書かれてあります。ほんと至れりつくせりで欲しい機能がちゃんと考慮されていますね。その解説導入部分でもこのようなことが書かれています。ビューテンプレートに関しては、Webデザイナーが更新を行うケースが多いので、テンプレートの書式を変更するのが難しい場合があります。P238の「フレークワーク」は「フレームワーク」が正解。あと、ここの表10-1にコンポーネントのフックメソッド5種(initialize(),startup(),beforeRender(),shutdown(),beforeRedirect())が記載されていて、表タイトルが「Viewクラス-フレームワークで設定される変数」とありますが、これは明らかに異なるタイトルでしょう。P242の表タイトルが一部コピペされています。正式には「フックメソッドの種類と呼び出しタイミング」のようなタイトルにしないとですね。ついでに、これらのフックメソッドの使い分けのコツみたいなものがあるとフックメソッドの利用シーンが具体的にイメージできて良かったのではないかと思います。クラスここではSimpleHelperクラスがAppHelperクラスを継承し、さらにAppHelperクラスがHelperクラスを継承しているクラス図が描かれています。継承が矢印で記述されているのですが、UML的に正確に描かれていません。これは初心者にも分かりやすくしたためでしょうかね。誤解を与えないためにもUML式に描いておいて問題ないと思いますが。クラス」で描いてあったクラス図の描き方でSimpleBehaviorの継承先が示してあります。フックメソッドの実装CRUD処理って?P249にさりげなく登場している「CRUD処理(クラッド)」という用語ですが、これは一般的なデータ処理に必要な4つの機能である、作成(Create)、読み出し(Read)、更新(Update)、削除(Delete)をまとめた言葉です。後半に丁寧な説明が出てきますが、ここで説明したほうが良かったのでは。まとめヘルパー、コンポーネント、ビヘイビアを学んだまとめという項目ですが、なんとユーザー認証をAuthComponentを利用したやり方で新たに書き直すという作業が行われます。「まとめ」ではなく新機能です。笑この「まとめ」の項目は制作者は必ず把握しておくべき箇所です。利用する各コントローラーに同一のログインの仕組みを組み込めるログインフォーム表示後にリダイレクトして目的のページを再度表示させるloginRedirect()メソッドが使えるパスワードをConfigurationのSecurity.saltを使ってハッシュ化させる仕組みが使えるつづく。5.1プロの現場の仕事術」HTML5サイトを作らずにはいられない。田舎に生まれ育ち東京へ。技術はDTPデザインからプログラミングまで、インフラはCD-ROM全盛からクラウドサーバーまで、いろいろなビジネスを作り、関わってきました(知見を生かして専門学校の講師も3年ほど)。今ではAWSで月間100万PVを超えるサービスを制作・運営しながらさらなるノウハウを蓄積中。このサイトではビジネスをITコンサルタント視点で考え、感じた知見や経験が世の中のお役に立てば、という視点で無料記事として公開しています。最近は機械学習による仕事の効率化を研究中。reserved.代表者のライフハックブログ。