以前から徐々にお知らせしていました、
私が執筆したZendFramework2の書籍『Zend Framework 2徹底解説』が遂に発売となります。
今までは仮の状態でしか公開出来なかった情報も確定しましたので、
発売日と共にご報告します。
『Zend Framework 2徹底解説』書籍情報
今回発売されるのは、Zend Framework 2の日本語書籍です。
現状では、Zend Framework 2を日本語で解説する唯一の書籍となります。
そんな書籍の情報をお知らせ致します。
書籍名 | Zend Framework 2徹底解説 |
---|---|
ISBN13桁 | 978-4-7980-4011-0 |
頁数 | 568頁 |
本体価格 | 3,600円 |
発売日 | 2013年12月12日 |
著者名 | 濱田 優(当ブログの管理人) |
『Zend Framework 2徹底解説』の目次
Chapter 1 新しく生まれ変わった Zend Framework
1-1 新しく生まれ変わったZend Frameworkとは?
1-2 「Zend Framework 1」と「Zend Framework 2」の違いは?
1-3 プロジェクトを移行できるのか?
1-4 ライブラリとして使うか?フレームワークとして使うか?
Chapter 2 開発環境の準備とインストール
2-1 求められるサーバー環境や前提条件について
2-2 XAMPPを使用してローカルサーバ環境を構築しよう!
2-3 ZendFramework2 を入手し、インストールしよう!
Chapter 3 フレームワークとして使用する Zend Framework 2
3-1 MVCとは?
3-2 命名規則やURL、コーディングルールを把握しよう!
3-3 スケルトンプロジェクトを導入しよう!
3-4 フレームワークとして利用する際のディレクトリ構造と処理の流れ
3-5 Controller を作成して、実行処理を切り分けよう!
3-6 View を構築して画面へ表示させよう!
3-7 Modelを作成してデータベースへアクセスしよう!
Chapter 4 コミュニティサイトを作ってみよう!
4-1 サイト設計を元に準備しよう!
4-2 会員情報の「一覧表示」「詳細」「新規追加」「編集」「削除」
4-3 リダイレクト先へ処理の完了メッセージを渡そう
4-4 ログイン機能を実装しよう
4-5 基本機能の総復習。掲示板を実装しよう!
4-6サイト全体を整えよう
Chapter 5 より充実させるために
5-1 ページングを実装しよう!
5-2 開発効率を良くするためのログ出力!
5-3 システムエラーページや404ページをカスタマイズしてみよう!
5-4 スパム対策のために画像認証を導入してみよう!
5-5 開発をサポートするデバッグツールバーの導入
5-6 ViewのテンプレートエンジンにSmarty3を使用してみよう!
Chapter 6 クラス/ライブラリ・リファレンス
6-1 認証の仕組みを提供する「Zend\Authentication」
6-2 バーコードの生成を手助けする「Zend\Barcode」
6-3 キャッシュ機構を提供する「Zend\Cache」
6-4 スパム対策に効果的な画像認証「Zend\Captcha」
6-5 設定データを管理する「Zend\Config」
6- コマンドラインからZF2を起動する「Zend\Console」
6-7 複雑な暗号化を手助けする「Zend\Crypt」
6-8 データベースとやりとりを行う「Zend\Db」
6-9 クラス間の依存関係を緩くする「Zend\Di」
6-10 DOMを取り扱う「Zend\Dom」
6-11 XSSを防止する「Zend\Escaper」
6-12 イベントの発生と受けとりを管理する「Zend\EventManager」
6-13 フィードの作成・解析を行う「Zend\Feed」
6-14 値に対してフィルタを掛ける「Zend\Filter」
6-15 フォーム要素を構築する「Zend\Form」
6-16 HTTP通信に関する制御を行う「Zend\Http」
6-17 国際化をサポートする「Zend\I18n」
6-18 入力値に対してフィルタリングを行う「Zend\InputFilter」
6-19 PHPとJSONの相互変換をサポートする「Zend\Json」
6-20 LDAP通信を行う「Zend\Ldap」
6-21 PHPのオートローディング機能の利用を手助けする「Zend\Loader」
6-22 様々なログを出力する「Zend\Log」
6-23 高度なメールの送信を可能にする「Zend\Mail」
6-24 数学的関数を拡張した「Zend\Math」
6-25 MIMEの構築をサポートする「Zend\Mime」
6-26 ZF2のモジュールを管理する「Zend\ModuleManager」
6-27 ZF2のMVCアーキテクチャを実現する「Zend\Mvc」
6-28 サイトの構造を管理する「Zend\Navigation」
6-29 データのページングを行う「Zend\Paginator」
6-30 アクセス権を管理する「Zend\Permissions」
6-31 処理の進捗状況を通知する「Zend\ProgressBar」
6-32 データを文字列として管理する「Zend\Serializer」
6-33 リフレクションを手軽に行える「Zend\Server」
6-34 サービスロケーターパターンを実現する「Zend\ServiceManager」
6-35 セッション管理を強化する「Zend\Session」
6-36 SOAPを使用したサービスと連携する「Zend\Soap」
6-37 配列とオブジェクトを合成する「Zend\Stdlib\Hydrator」
6-38 タグの強調度合いを制御する「Zend\Tag」
6-39 ユニットテストを行う「Zend\Test」
6-40 文字列をアスキーアートなどの様々な形式で表現する「Zend\Text」
6-41 URIを管理する「Zend\Uri」
6-42 値の有効性を検証する「Zend\Validator」
6-43 バージョン番号を取り扱う「Zend\Version」
6-44 ZF2の出力部分を担当する「Zend\View」
6-45 XML-RPC連携を手助けする「Zend\XmlRpc」
『Zend Framework 2徹底解説』の内容紹介
「Zend Framework」が2007年7月1日に発表されて以来、
約5年の歳月を経て初のメジャーアップデートとなる「Zend Framework 2」を発表しました。
本書では、そんな「Zend Framework 2」の概要から「Zend Framework」との違い、
導入方法や、MVCアーキテクチャを主軸としたフレームワークとしての活用方法までを、
基礎編として丁寧に解説します。
応用編では、実際にコミュニティサイトを作成しながら各機能について、
実例を交えながら解説し、より充実させるための様々な機能追加方法についても触れています。
後半では、ある程度「Zend Framework 2」を使い慣れた方向けに、常に開発時にお役に立てるよう、
45項目の各コンポーネントについてリファレンス的に解説します。
初心者にはとてもわかりやすく、上級者には長くお使い頂けることを目指し、本書を執筆させて頂きました。
本書を手に取り、「Zend Framework 2」にてWebアプリケーション開発を行うすべての方に、
本書がお役に立てれば幸いです。
匿名で申し訳ありません。
返信削除間違いだと思いますので書かせて頂きます
P39の、Code 3-20と3-21、同じだと思いますが?
あと、どこかに正誤表とか掲載される予定はありますでしょうか?(参考のため)
お世話になります。
削除この度は本のご購入、並びに間違いのご報告、
誠に有難うございます。
P39の、Code 3-20と3-21を確認した所、
確かに同じコードとなっていました。
こちらの部分では、インデントの開始位置の解説で、
3-20と3-21では、どちらも「正しい」インデントとなっています。
3-20の間違った例では、クロージャー開始位置を始点とした
インデントを表現するのが正しいです。
正誤表に関しましては、
今回頂いたご報告が初めての誤りでしたので、
現状では正誤表は用意されておりませんが、
http://www.shuwasystem.co.jp/support/7980html/4011.html
にてダウンロード対応する予定です。
他にも、何かお気づきの点が御座いましたら
お気軽にご連絡下さい。
今後ともよろしくお願いいたします。
書籍で作成したコミュニティサイトなのですが、コメント投稿時に投稿ユーザのIDを取得できていないように思えるのですが…
返信削除2.3.1を使用して、XAMPP3.2.1上で動作させているのですが、どのユーザでコメントを投稿してもcommentテーブルのuser_idに0が入ってしまいます。
お世話になります。
削除この度は本のご購入、並びに間違いのご報告、
誠に有難うございます。
確認致しました所、「SampleSite」内のサンプルプロジェクトにおいて、
下記のファイルに間違いが御座いました。
~~module\Application\src\Application\Model\Comment.php
誤った内容と致しましては、
「exchangeArray()」内の$dataに対する添え字として、
キャメルスタイルが正しところ、スネークスタイルとなっており、
正しくデータを取得することが出来ていませんでした。
具体的な修正箇所は下記の通りです。
「誤」$data['parent_id']
「正」$data['parentId']
「誤」$data['user_id']
「正」$data['userId']
現在ダウンロード可能なサンプルプロジェクト自体も近日中に修正させて頂きますので、
お手数お掛けしますが上記修正を加え、ご確認頂ければ幸いです。
他にも、何か御座いましたらお気軽にご連絡下さい。
今後ともよろしくお願いいたします。
ありがとうございます!
削除無事に入りました。
お世話になります。
削除この度はお返事頂きまして、誠に有難うございます。
無事に動作したようで何よりです。
他にも何か御座いましたらお気軽にご連絡下さい。
今後ともよろしくお願いいたします。
はじめまして。
返信削除勉強がてら貴殿のZend Framework 2徹底解説を購入させていただきました。
読みやすく大変助かっております。
ただ1つ疑問なのですが、
ZendFramework1(以下、ZF1)では、controller配下にアクションコントローラを置くと
URIから自動で判断し、該当するアクションコントローラーを起動してくれたと思うのですが、
ZendFramewor2(以下、ZF2)は、module.config.php 内の連想配列の'controllers' の ’invokables’ に
起動するアクションコントローラの記載をいちいちしないといけないのでしょうか?
これをZF1みたいにURIからコントローラを探すようにしたいですがZF2では無理なのでしょうか?
(開発時にいちいちmodule.config.phpを各人が編集しているのは効率がよくないので、
いちいちmodule.config.phpを編集したくない)
このような事をここで聞いてよいのか?も疑問でしたが、書籍にも載っておらず、
かといってどこにも情報が載ってなかったので申し訳ないとは思いましたが、
こちらに質問させて頂きました。
お手すきの時にでもご教授頂ければ幸いです。
m(_ _)m
お世話になります。
削除この度は書籍のご購入、誠に有難う御座います。
ご質問に対し、下記の通り解答させて頂きます。
>ZendFramewor2(以下、ZF2)は、module.config.php 内の連想配列の'controllers' の ’invokables’ に
>起動するアクションコントローラの記載をいちいちしないといけないのでしょうか?
基本的に、セキュリティの観点から明示的に指定することが推奨されています。
>これをZF1みたいにURIからコントローラを探すようにしたいですがZF2では無理なのでしょうか?
私自身で試してはいませんが、下記記事にてコントローラを指定し忘れても自動的に読み込まれる様にする方法が紹介されています。
http://samsonasik.wordpress.com/2012/12/23/zend-framework-2-automatic-controller-invokables-via-abstract-factories/
ZF2ではコントローラの明示的な指定が推奨されていますが、とても柔軟な作りになっていますので、
上記方法以外にも様々な方法が考えられそうです。
ご参考にして頂ければ幸いです。
今後とも宜しくお願い致します。
ご返信ありがとうございます。
削除ご教授頂いたページの記載通りに行ったらできました。
まだ勉強段階で仕事で使用しておりませんが、
これでZF1→ZF2に移行する際にも文句を言われなくて済みそうです。
この度は大変ありがとうございました。
この度はご連絡頂きまして、誠に有難う御座います。
削除問題なく動作したようで何よりです。
他にも、ご不明な点が御座いましたら
お気軽にコメント下さい。
今後とも宜しくお願い致します。
濱田様
返信削除はじめまして。
濱田様のZendFramework2 徹底解説を購入したものです。
日本語で記載されているZend2の解説本は少なく(ってかない)ので大変助かっております。
まだ本を読み進めていて疑問が生じたのですが、できましたら質問に回答して頂ければ幸いです。
06-08(293ページ)の code 6-82 にて adapterへの作成を解説されておりますが、
こちらは各アクションのコントローラーもしくはモデルでインスタンスを生成するのでしょうか?
できれば、ZEND1でいうbootstap.phpみたいな箇所でiniファイルからDBの接続情報を取得、
アダプタのインスタンスを生成、レジストリに登録後に
DBを使用したい各アクションでレジストリからインスタンスを取り出してDBにアクセスという形に
したいのですが、Zend2をこれをやろうとするには、どこでどうすれば良いのか?が全く解りません。
恐らくiniファイルの読み込みは Zend\Config\Reader\Ini を使用して、
インスタンスの持ち回りはServiceManagerを使用するのかな?という所まで
なんとなく解るのですが、
それを【どこのソース】で【どのように記載】すればよいのか?が解りません。
また各アクションのコントローラーで、ServiceManagerに登録したインスタンスの取得の仕方も
以下のような感じでいまいちウマクいきませんでした。
(恐らく登録箇所(ソース)か登録方法が誤っているのだとは思うのですが、、、汗)
-----------------------------------------------------------------------------------------------------------------------------
$adpter = $serviceManager->get('adpter');
Testコントローラーにて上記のような記載をしたが、
「Zend\ServiceManager\Exception\ServiceNotFoundException」がでてしまう。
-----------------------------------------------------------------------------------------------------------------------------
素人質問で大変申し訳ないのですが、
IniファイルからDBの接続情報の取り出し → アダプタの生成→ アダプタをサービスに登録
の一連の流れ、記載箇所を解説して頂けないでしょうか?
以上、よろしくお願いいたします。
連投すみません、上記の投稿をしたものです。
削除お作法的にglobal.php にiniの取得処理を記載してよいか?
謎でしたが、とりあえず以下の方法で自己解決いたしました。
お騒がせいたしました。
もしこの方法のが良い、簡単だがあればご指摘頂けると幸いでございます。
\skeleton\config\autoload\global.php
---------------------------------------------------
use Zend\Config\Reader;
$reader = new Reader\Ini();
$config = $reader->fromFile('C:/zend/skeleton/module/Application/src/Application/config.ini','staging');
$dbhost = $config['database']['params']['host']; //
$dbname = $config['database']['params']['dbname']; //
$dbusername = $config['database']['params']['username']; //
$dbpassword = $config['database']['params']['password']; //
:
return array(
'db' => array(
'driver' => 'pdo',
'dsn' => 'mysql:dbname='.$dbname.';host='.$dbhost.';charset=utf8',
'username' => $dbusername,
'password' => $dbpassword,
),
'service_manager' => array(
'factories' => array(
),
),
);
:
---------------------------------------------------
\skeleton\module\Application\Module.php
---------------------------------------------------
:
:
use Zend\Db\Adapter\Adapter;
use Zend\Db\TableGateway\Feature\GlobalAdapterFeature;
:
:
class Module
{
public function onBootstrap(MvcEvent $e)
{
$eventManager = $e->getApplication()->getEventManager();
$moduleRouteListener = new ModuleRouteListener();
$moduleRouteListener->attach($eventManager);
//DB adapter をstaticで持つ
$this->createDbAdapter($e);
}
//DB adapter をstaticで持つ
protected function createDbAdapter(MvcEvent $e)
{
$config = $e->getApplication()->getConfig();
$adapter = new Adapter($config['db']);
GlobalAdapterFeature::setStaticAdapter($adapter);
}
:
:
---------------------------------------------------
adapterを使用する例
---------------------------------------------------
use Zend\Db\TableGateway\Feature\GlobalAdapterFeature;
use Zend\Db\Sql\Sql;
:
:
:
$adapter = GlobalAdapterFeature::getStaticAdapter();
$sql = new Sql($adapter);
$select = $sql->select();
$select->from('table');
// $select->colums(array('user_id',));
$selectString = $sql->getSqlStringForSqlObject($select);
$results = $adapter->query($selectString, $adapter::QUERY_MODE_EXECUTE);
foreach($results as $row){
var_dump($row);
}
:
:
---------------------------------------------------
はじめまして、匿名で失礼いたします。
返信削除ZendFramework2徹底解説、購入させていただき活用しております。
1点質問がございます。
This result is a forward only result set, calling rewind() after moving forward is not supported
のエラーメッセージが出る際の対応方法として、$resultSet->buffer();をご提示いただいていると思います。
$resultSet = $this->tableGateway->select();
return $resultSet;
2.$statement->execute();
$sql = new Sql( $this->tableGateway->adapter );
$select = $sql->select();
$select->from('hogehoge');
// 作成したクエリを使用してステートメントを作成する
$statement = $sql->prepareStatementForSqlObject($select);
$resultSet = $statement->execute();
1.の場合は、bufferが効き、複数回のforeachに対応できております。
2.の場合に、エラーとなります。bufferに入れることが出来ないのでしょうか?
素人のような質問でしたら、誠に申し訳ありませんが、どうぞよろしくお願いいたします。