CakePHP2講座の25回目から完了まで

25.コメント機能の実装、概要:コメントの一覧表示、追加、削除。Model:MySQLのテーブル、association、Controller:index,add,delete
26.コメント機能の実装、テーブル作成:create table comments で作成。外部リファレンスキー制約は使わない。
27、28.コメント機能の実装、ポストとコメントのアソシエーション:$hasMany、$belongsToを使うことで、ポストからコメントを扱うのがとても簡単。
29、30.コメント追加:いつものようにCommentsControllerにaddメソッドを追加、view.ctpにAdd Commentの実装を書く。
31、32.コメント削除:Ajaxで実装。殆どはポストの削除のコピペで行なう。(これはコピペじゃない方法ってないんかな)

32/32完了

CakePHP2講座の9回目から

9. ビューの下にSQLが表示されるが、これはConfig/core.phpの"Configure::write('debug',2);"の2を0とすると消すことが可能。


10. 記事一覧をblog/postsではなく、blog/で表示できるように設定する:Config/routes.phpでRoute::connectの変更を行ない、controllerはposts、actionはindexにする。ヘッダー、フッターはView/Layouts/default.ctpに記述されている。自分が書いたところは、49行目あたりのfetch('content'); ?>に入る。PostControllerにて、$this->set('title_for_layout', '記事一覧');とすると、ページタイトルが「記事一覧となる」(下図)


11. findおよび、公式サイトのAPIドキュメントの使い方


12,13. 個別記事の詳細表示およびインデックスからリンクを貼る:view関数をPostsControllerに追加。view.ctpも追加。またindexからviewへのリンクを作るため、index.ctpではコントローラーに追加したHtmlヘルパーを使ってリンク作成。echo $this->Html->link('リンクテキスト', リンク先URL)という形。他にも元に戻る場所を追加するために、default.ctpを変更して"/"に戻るリンクをつけた。


14,15. 記事追加。addメソッドをコントローラーに追加、add.ctpを追加。add.ctpには必要最低限でやりたいことができるのがCakePHPのすごいところ。$this->Form->create('Post')……(Input項目を列挙)……$this->Form-end('Save Post')でPostするFormが作成できる。これはすごい。他には、$this->Session->setFlashなど。


16. Validation:Modelクラスのpublic $validateに配列で指定する。これはとても簡単で便利だ。CakePHPのドキュメント、BookのModel->Data Validationに詳細がある。


17. jQueryの導入:View/Layouts/default.ctpにjqueryを読み込ませ、setTimeout、fadeOutでメッセージを消した


18、19. 記事の編集:コントローラーにedit($id)メソッドを追加。$this->Post->id = $idとして、$this->request->data = $this->Post->read();とする。edit.ctpを追加。index.ctpに編集画面へのリンクを追加。


20、21.記事の削除:コントローラーにdeleteメソッドを追加。削除用の画面は不要なので、index.ctpに削除用フォームとそれにポストするリンクを追加。それは$this->Form->postLinkで可能。


22、23.削除処理のAjax化:JavaScriptで画面上の動的な削除を、ControllerでDBからの削除を行なう。$this->request->is('ajax') として判別する。このあたりどういう動きなのか全くわからないので要研究

modern.ieからWindowsのVagrant用ボックスを使ってみる。

 Vagrantのボックスをもらったときどうするんだっけ? とあんなに毎日使っていたのに、今や全て白紙でまっさらな状態になってました。


 今回WindowsをゲストOSとしていので、まずはmodern.ieから"IE10 - Win7.box"というのを持ってきます。話はそれからです。

> vagrant box add win7_ie10 "IE10 - Win7.box"
(いろいろ出てくる)

> vagrant box list
bento/centos-6.7 (virtualbox, 2.2.3)
win7_ie10        (virtualbox, 0)

> mkdir win7_ie10
> cd win7_ie10
> vagrant init win7_ie10
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.


 ここでVagrantfileを開く。なぜかというと複数のvagrantゲストOSを起動したいので、sshのポート2222を2200とかにしたいから。Vimなどで、「config.vm.network "forwarded_port", id: "ssh", guest: 22, host: 2200」という一行を追加する。さて、起動しよう。

> vagrant up


 めちゃくちゃ待たせられるが、ちゃんと起動してくれます。その後は

  1. Guest Addition CDをインストール
  2. IEを開いてネットにつながってない場合は、"Internet Option"−"Connections"-「LAN Settings」を開き「Automatically detect settings」のチェックを外すと繋がる時がある。
  3. メモリを4Gくらいにして再起動(もしくは、VagrantfileでguiをONにしてとmemoryサイズを変更しても良い)


これでJavaでもScalaでも入れてお試し環境を作れます。

CakePHP2講座の8回目から

httpd.confの修正でscaffoldも無事に使えるようになった。では8回目から

http://dotinstall.com/lessons/basic_cakephp/7508

  1. indexを記述:Controller/PostsController.phpのpublic function index()を記述。同じく、View/Posts/index.ctpを記述。 --> Postsを表示できるようになった。(下画面)

1.Lv9をやめてHXPに移る。 2.CakePHPのwebroot以下のcssやimgを読み込んでくれない問題解決

Lv9ではPHP->PDOを用いてのMySQLへのアクセスができなかった。HXPは簡単な審査が必要らしいが、日本のサーバーだし、無料だし、サポートもよさそうなのでこちらに移ることにした。こっちだと簡単にPDOでのMySQL接続も可能。当面の問題は解決。


では、ドットインストールの続きをやっていこう。といっても、7回目の講義、scaffoldを使ってもNot foundとなってしまうので、そこをなんとかしよう。

  1. まず、バージョンを2.2系に落とす。 --> やっぱだめ。
  2. CakePHPのトップを開くと「 URL rewriting is not properly configured on your server」とある。これが原因とあたりをつけ、検索。http://www.phpbook.jp/cakephp/install/index3.htmlCakePHP 2で「mod_rewriteが動いていない」と怒られた場合の暫定的な対策 | アイビースターのサイトがみつかる。
  3. あとのサイトに「原因がわかりました。今回、CakePHPをアップロードする前にApacheの設定でルートディレクトリを変更していました。このときhttpd.confのDocumentRootは変更したのですが、「」のパスを変更するのを忘れていました。それに気がつき、早々に対処したところ無事起動。単なる自分のおっちょこちょいでした。お騒がせしてすみませんでしたm(__)m」とありました。これか! と以下のようにhttpd.confの変更を行った。元のはコメントして、その下に新しい行を追加。
#DocumentRoot "/var/www/html"
DocumentRoot "/home/vagrant/public_html"
:
:
#<Directory "/var/www/html">
<Directory "/home/vagrant/public_html">
:
:
#Alias /blog/ "/home/vagrant/public_html/blog/"
<Directory "/home/vagrant/public_html/blog/">
    Options FollowSymLinks
    AllowOverride All
</Directory>


これで解決。2.3でもちゃんと動く(下は、修正前と修正後)。はあ、はまったなあ。





 気を取り直してScaffoldが動くことも確認し、続きをやっていこう。

CakePHP2の講座を始めるも、Not foundにハマってしまう。

CakePHP2のコースに進む。


http://dotinstall.com/lessons/basic_cakephp/


  1. コース概要、用語(MVC、CoC):この辺りでpublic_htmlというフォルダが出てきて、こんなの無いぞ、と思った。こちらのサイトを参考に/home/vagrant/public_htmlをつくって、アクセスできるようにした。ついでに/etc/httpd/conf/httpd.confにAlias /dev/ "/home/vagrant/public_html" を追加して、~vagrantと指定しなくても良いようにした。(このAlias設定はいずれ変更予定)
  2. インストール:フォルダ構成について説明。Config→アプリケーションの設定(DBの設定など)。2.2と使っていたがなかったので2.3.10というのを使う。Controller、Model、View→MVC。webroot→cssJavaScript、画像などをいれるところ。CakePHPを動かしているWebサーバー(例:apache)にchown -Rでapp/tmp以下のオーナー変更を行なう。
  3. データベースの設定:Config/database.phpの$defaultに、ユーザー名、パスワード、データベース名を設定。/dev/blog/を開き、「Cake is able to connect to the database.」と表示されているのを確認する。ついでに、publi_html/blogを /blog/と別名をつけ、/dev/の別名は削除。これでなんか良い感じ。→気になる点。cssや画像がまったく反映されていない。
  4. 開発の流れ:記事を作る(一覧表示、個別表示、追加・編集・削除)→Model(Model/Post.php)→Controller(Controller/PostsController.php)「index、view、add、edit、delete」→View(View/Posts)「index.ctp、view.ctp、add.ctp、edit.ctp」→単数形・複数形、ConotrollerとViewでファイル名が一致している。
  5. postsテーブルを作成する:本文、タイトルがある。テーブル名は複数形。id、created、modifiedというカラムは必須。
  6. Scaffold:Model/Post.php、Conotroller/PostsController.phpを作成。ScaffoldはPostsControllerクラスに「public $scaffold;」と書くだけ →blog/postsとしてもNot found。.htaccessなどを見たがさっぱり。(参考にしたサイト、CakePHPでNot Foundになってしまった場合 | PHPプログラマのバリ・ポジ情報ブログhttp://kanonji.info/blog/2013/04/23/cakephp2%E3%81%8Curl%E3%82%92%E3%81%A9%E3%81%86%E3%83%91%E3%83%BC%E3%82%B9%E3%81%97%E3%81%A6%E3%82%8B%E3%81%8B%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F/http://be-hase.com/php/224/https://help.sakura.ad.jp/app/answers/detail/a_id/2317/~/mod_rewrite%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E5%88%B6%E5%BE%A1Apacheのmod_rewriteモジュールの使い方を徹底的に解説 | OXY NOTESなど)


httpd.confのAliasが行けないのか。2.2と2.3.10ではいろいろ違いすぎて動かないんだろうか。今日は2.2でやり直してみよう。

CakePHPの勉強にはいる……の前に、CakePHPとMySQLを使えるレンタルサーバーについて軽く調査

いずれは公開するサービスを、と考えて、CakePHPMySQLを使えるレンタルサーバーをある程度一覧にしてみた……が途中で面倒になって中途半端で終わっている。
各々最安のプランです。

レンタルサーバー名 初期費用(円) 月額(円) 容量 PHPバージョン MySQLバージョン CakePHPの導入 その他
さくらインターネット 1,029 515 100GB、20DB 5.2-5.4,5.6 ? マニュアルインストール
ロリポップ 1,500 300 50GB、1DB、60GB/日 5.2-5.5 5.6.11 マニュアルインストール
xrea 無料 無料 50MB、1DB、1000MB/日 4-5 マニュアルインストール xrea+でもそれなりに安い
Lv9 無料 無料 10GB? 5.4? マニュアルインストール?
ミニバード 1,612 324 50GB 5.1,5.3-5.6 5 マニュアルインストール 6ヶ月以上契約だと月額250円
cgi-games 無料 無料 無制限? マニュアルインストール? 審査がある。商目的・陳腐なものより新規性が好まれるらしい
chobiネット 無料 無料 100M マニュアルインストール?
ドメインキング 504 108 20GB、1DB マニュアルインストール
ヘテムル 3,950 1,500 256GB、100DB、60GB/1日 5.3、5.4、7.0 5.6 簡易


PagodaBoxやHerokuは無料かもしれないが、まだ僕には敷居が高すぎる。


途中でこういうサービスを見つけたのでこっちで探すのが良いかも。--> http://www.server-search.jp/


縛りとかゆるいのでLv9にとりあえず作ってみました。--> PDOでMySQLにつなぐのがよくわからない。hostの指定が悪いのか、なんなのか……また日本語もデフォルトで使えない。