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
めちゃくちゃ待たせられるが、ちゃんと起動してくれます。その後は
CakePHP2講座の8回目から
httpd.confの修正でscaffoldも無事に使えるようになった。では8回目から
http://dotinstall.com/lessons/basic_cakephp/7508
- 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となってしまうので、そこをなんとかしよう。
- まず、バージョンを2.2系に落とす。 --> やっぱだめ。
- CakePHPのトップを開くと「 URL rewriting is not properly configured on your server」とある。これが原因とあたりをつけ、検索。http://www.phpbook.jp/cakephp/install/index3.html、CakePHP 2で「mod_rewriteが動いていない」と怒られた場合の暫定的な対策 | アイビースターのサイトがみつかる。
- あとのサイトに「原因がわかりました。今回、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/
- コース概要、用語(MVC、CoC):この辺りでpublic_htmlというフォルダが出てきて、こんなの無いぞ、と思った。こちらのサイトを参考に/home/vagrant/public_htmlをつくって、アクセスできるようにした。ついでに/etc/httpd/conf/httpd.confにAlias /dev/ "/home/vagrant/public_html" を追加して、~vagrantと指定しなくても良いようにした。(このAlias設定はいずれ変更予定)
- インストール:フォルダ構成について説明。Config→アプリケーションの設定(DBの設定など)。2.2と使っていたがなかったので2.3.10というのを使う。Controller、Model、View→MVC。webroot→css、JavaScript、画像などをいれるところ。CakePHPを動かしているWebサーバー(例:apache)にchown -Rでapp/tmp以下のオーナー変更を行なう。
- データベースの設定:Config/database.phpの$defaultに、ユーザー名、パスワード、データベース名を設定。/dev/blog/を開き、「Cake is able to connect to the database.」と表示されているのを確認する。ついでに、publi_html/blogを /blog/と別名をつけ、/dev/の別名は削除。これでなんか良い感じ。→気になる点。cssや画像がまったく反映されていない。
- 開発の流れ:記事を作る(一覧表示、個別表示、追加・編集・削除)→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でファイル名が一致している。
- postsテーブルを作成する:本文、タイトルがある。テーブル名は複数形。id、created、modifiedというカラムは必須。
- 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%A1、Apacheのmod_rewriteモジュールの使い方を徹底的に解説 | OXY NOTESなど)
httpd.confのAliasが行けないのか。2.2と2.3.10ではいろいろ違いすぎて動かないんだろうか。今日は2.2でやり直してみよう。
CakePHPの勉強にはいる……の前に、CakePHPとMySQLを使えるレンタルサーバーについて軽く調査
いずれは公開するサービスを、と考えて、CakePHPとMySQLを使えるレンタルサーバーをある程度一覧にしてみた……が途中で面倒になって中途半端で終わっている。
各々最安のプランです。
レンタルサーバー名 | 初期費用(円) | 月額(円) | 容量 | 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の指定が悪いのか、なんなのか……また日本語もデフォルトで使えない。