bakeにおけるControllerについて
必要な情報をうまく使うにはコントローラーを使いこなしていきましょう
CakePHPの制作を始めて、bakeの便利さに感動する毎日であります。
ただやはり万能というものではなく自分の理想通りに制作を進めたかったら決まった工程を踏まないといきません。
そこで今回は私がゴリゴリ使っているコントローラーのbakeの仕方を記載致します。
scaffoldを使用しない
まあそれがどうしたと思われるかもしれませんが、実際私が制作を進める上でscaffoldを使わないというだけで いい感じに制作が進められたのでご紹介したいと思います。
やり方ですが簡単でbakeでControllerを選択し「Would you like to use dynamic scaffolding? (y/n) 」scaffoldを使う? と聞かれたら「n」使わないです。と選択します。
続いて「Would you like to create some basic class methods (index(), add(), view(), edit())? (y/n) 」 基本的な4つのmethodを作る?と聞かれるので、「y」はい作ってください。にしましょう。
あとはすべてデフォルトで進めるだけで使い勝手のいいコントローラーを手に入れられます。
もしまた使いやすいもの見つけたらアップしていきます。
vagrantを使っていてGitHubにリポジトリを上げられない時の対処法
Gitは奥が深く一朝一夕では理解出来ませんね
現在vagrantを使って制作物をGitで管理しているのですが、Git add .やGit commit などはうまくいっても GitHubのリポジトリにpush出来ずに苦労したので解決法などを記載致します。
Git pushしたときのエラーログごとに解決策を記載していきます。
1.ssh: Could not resolve hostname github.com: Temporary failure in name resolution
ネットワークの問題の可能性があるので再起動すると解決するかと思います。
2.error: The requested URL returned error: 403 Forbidden while accessing https:ka/ecitem_review.git/info/refs
こちらが出たときやリポジトリの名前が違うなどのエラーが出たときは言われた通りにリポジトリの名前を変えてあげましょう、ただ私自身そうだったのですがいろんなサイトを見るとそれぞれ書いてあることが異なりどれを参考にしていいのか分からなくなります。 実際私が以前自分で書いた記事を参考にしてもうまくいきませんでした。
解決法は一つではなく自分のエラーログをしっかり見て何が必要かただ盲目的にサイトを回遊するのではなくはっきりと目的を定めて原因を探ることが大切です。
さてといったところで自分の解決法を記載します。
- まず自分で作ったGitHubのアカウントに入りCodeを見ます
そこにhttpsのURLかSSHを確認できるところがあると思うのでSSHの方をコピーします。
$ git remote set-url origin ここに先ほどのSSHを貼り付けます
これでもう一度git pushをしてみてください。
3.Bad owner or permissions on /home/vagrant/.ssh/config
公開鍵を設定し直してみてください。このサイトに詳しく書いてあります。
4.Permission denied (publickey)
cd ~/.ssh
.sshに移動するのでフォルダ内にある鍵やconfigの権限を変えてみてください。
パーミッションの変更の仕方は「chmod 数字三つ ファイル名」です。
権限は777として書き込み、読み込み、実行がすべてのユーザーで可能にして試してください、ただ本来はよくないので、pushが成功したら不必要なものは変えましょう。
パーミッションにはルールがあって全て権限を777にしても一時的には通ったとしてもその後うまくいきません 私が試して成功したものをエラーログごとに記載していきます。
Bad owner or permissions on /home/vagrant/.ssh/config
というエラーが出たら見てわかる通りconfigについて言われているので
chmod 020 config
とします。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0777 for '/home/vagrant/.ssh/id_rsa' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. bad permissions: ignore key: /home/vagrant/.ssh/id_rsa Permission denied (publickey).
このようなエラーが出た場合は、秘密鍵のパーミッションがオープンすぎると言われているので
chmod 600 id_rsa
こうするのが正しいらしいです。
パーミッションにはそれぞれルールがあるりそれが影響していたようです。 パーミッションに関してはこちらの記事を参考にさせて頂きました。
SSHで接続しようとしたら秘密鍵のパーミッションでエラーが出た - yachibit.log
ちなみに他サイトやドットインストールを利用している場合ほぼほぼ「id_rsa.pub」が公開鍵です.pubはpublicのpubだと思われます。
これでうまくいかないときはGitHubに送るフォルダやファイルの権限も変えてください。
これらのエラーに対してのアプローチは以上になります。
この記事を書くにあたってかなりの時間を使ってエラーと向き合っていたのですが、正直言ってエラーの原因等が分かりにくくて苦労しました。ただ
CUIでのエラーは良く分からないからといって投げてしまってはなにも解決しません。
何が原因かを考えて試行錯誤していくことでいつか必ず答えが見つかるのでこれを読んでいて頭を抱えてるあなたも諦めずにやりきって下さい。
そして出来ればその過程を記録して解決法をまとめていつか同じように困っている人に教えてあげてください。 自分が助けられたら次は他の誰かを助けてあげるといいかと思います。
vagrantを利用したCakePHP2系の環境構築その2
もう一山あった環境構築について
vagrantで用意した環境でCakePHPを動かしていたら何かおかしい、CSSが読み込まれない、などがあったので 解決法を記載していきます。
vagrantにダウンロードしたCakePHPを入れる方法は以前書いた記事を参考にしてください。
vagrantを利用したCakePHP2系の環境構築 - 情弱エンジニアのなかのblog
ダウンロードしたものを/home/vagrantの中にフォルダを作ってビルドインサーバを立ち上げて実行する。
その時エラーが出て進まない、そもそもindexが読み込まれてなさそうだという方は参考にしてください。
1.apacheは使えるのか
2.CSSが読み込まれない
3.Security.salt, Security.cipherSeedを変更しなくては
4.データベースの諸々を記載する
5.デバッグキットを入れて完成!
1.apacheは使えるのか
まず最初にvagrantを利用するとapacheがうまく効いてないのではないかと思われます。 これはCakePHPを入れる階層を変えることで解決します。
具体的にはFTPの階層で/home/の一つ上の階層に行きそこから/var/www/html/の中にダウンロードしたCakePHPを入れます。
ブラウザで読み込むと色々とエラーは出るかもしれませんがとりあえずはapacheが繋がっていることが分かると思います。
2.CSSが読み込まれない
さてまずはCSSが読み込まれないことに関してですが、CUIで
vim /etc/httpd/conf/httpd.conf
でファイルを開き
<Directory "/var/www/html"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory>
となっているところがあるのですが以下のように編集してください。 途中にコメントなどがあると思うのですが気になさらずに変えちゃってください。
<Directory "/var/www/html"> Options FollowSymLinks AllowOverride All </Directory>
また読み込み専用となっているためふつうに:wq を押してもなんやかんや文句を言われ 書き込みが出来ないと思うので
:w !sudo tee % :q!
で無理やりにでも書き込んでください。
3.Security.salt, Security.cipherSeedを変更しなくては
続いては
Notice (1024): Please change the value of 'Security.salt' in APP/Config/core.php to a salt value specific to your application. [CORE/Cake/Utility/Debugger.php, line 839] Notice (1024): Please change the value of 'Security.cipherSeed' in APP/Config/core.php to a numeric (digits only) seed value specific to your application. [CORE/Cake/Utility/Debugger.php, line 843] Your version of PHP is 5.2.8 or higher.
Security.salt , Security.cipherSeedの値を変えれば解決するので
app/Config/core.php の初期値を変更してください。
/** * A random string used in security hashing methods. */ Configure::write('Security.salt', 'ランダムな文字列'); /** * A random numeric string (digits only) used to encrypt/decrypt strings. */ Configure::write('Security.cipherSeed', 'ランダムな数値列');
こうすれば解決です。
4.データベースの諸々を記載する
Your database configuration file is NOT present. Rename APP/Config/database.php.default to APP/Config/database.php
データベースの設定を色々と反映させる必要があるようですね
/app/Config/database.php.default をコピーして database.phpというファイルを作り中身を編集していきます。
69行目あたりの部分でデータベースの諸々の設定をしているところがあります。
public $default = array( 'datasource' => 'Database/Mysql', 'persistent' => false, 'host' => 'localhost', 'login' => 'ユーザー名', 'password' => '設定したパスワード', 'database' => 'データベース名', 'prefix' => '', //'encoding' => 'utf8', );
これで編集するのは残すところあと一つです。
5.デバッグキットを入れて完成!
最後は
DebugKit is not installed. It will help you inspect and debug different aspects of your application. You can install it from github
デバッグキットを入れて下さと言われているので、CUIでapp/Pluginに移動してからCakePHP2のGitHubからデバッグキットをクローンする。
$ git clone https://github.com/cakephp/debug_kit -b 2.2 $ mv debug_kit DebugKit
これでデバッグキットが手に入るかと思うのですが何だかエラーでうまくデバッグキットを入れられないという場合は
GitHubのサイトからzipファイルでダウンロードしてapp/Pluginの中に解凍したフォルダを入れれば大丈夫です、ただしフォルダ名を「DebugKit」にすることをお忘れなく。
続いてapp/Config/bootstrap.phpのなかで
CakePlugin::load('DebugKit');
という一文を検索してコメントアウトを外してください。
最後にapp/Controller/AppController.php の中ので
class AppController extends Controller { public $components = array('DebugKit.Toolbar'); //追加 }
こう書けばオーケー!
エラーはすべて解決されるはずです。 以上になります。
CakePHPの命名規則について
MVCの命名規則を理解する
CakePHPでどうにもこうにも進まないエラーが出ましてコードに間違いがないか探したのですが 原因は命名規則を違反しているというものでした。
1.命名規則の整理
2.モデル、ビュー、コントローラごとの命名規則
3.まとめ
1.命名規則の整理
CakePHPではファイル名などを命名するときにいくつかルールがあります、 正しく命名しないと処理が動かないことがあるのでしっかり見ていきましょう。
2.モデル、ビュー、コントローラごとの命名規則
三つの命名規則を記載します。
モデル
データベースのテーブルは複数形で命名する
- モデル・クラスは複数形のキャメル記法で命名する
スクリプトファイル名はモデル・クラス名をそのまま(単数形のキャメル記法で)命名する
コントローラ
- コントローラクラス名はコントローラ名(通常はモデル名と同じ)の複数形+Controllerという形のキャメル記法で命名する
- スクリプトファイルは、コントローラクラス名をそのまま(複数形+Controllerをキャメル記法で)命名する)
アクションメソッド名は、一般的なメソッド名と同様、小文字で始まるキャメル記法で命名する
ビュー
ビューを保管するフォルダ名は、コントローラ名そのまま(複数形をキャメル記法で)命名する
- 各ビューテンプレートファイル名は、アクションメソッド名をアンダースコア記法にしたもので命名する
3.まとめ
- モデル名だけは単数形、それ以外でデータベースのデータを扱う名前は複数形にする
- クラスとして定義されるものはキャメル記法、クラスとは直接関係ないものはアンダースコア記法にする
モデルは単数形ですが、それ以外のものは、多数のデータを扱うわけですから複数形で命名するのが基本です。
テーブル名やモデルを利用するコントローラ名は複数形になっていまして、モデルやコントローラなどクラスとして定義されるものはキャメル記法ですが、テーブルやビューテンプレートのようにクラスでないものはアンダースコア記法になります。
長々と書きましたがやはり理解して使っていくことが大切だと思います。 以上になります。
vagrant up でYour VM has become "inaccessible." Unfortunately, this is a critical errorと出た場合
一旦落ち着くことが大切ね
vagrantを使っていて、いつも通りvagrant upをしたら
vagrant : Your VM has become "inaccessible." Unfortunately, this is a critical error 発生場所 行:1 文字:1 + vagrant up + ~~~~~~~~~~ + CategoryInfo : NotSpecified: (Your VM has bec... critical error :String) [], RemoteException + FullyQualifiedErrorId : NativeCommandError with VirtualBox that Vagrant can not cleanly recover from. Please open VirtualB ox and clear out your inaccessible virtual machines or find a way to fix them.
と出て何もできなくなってしまいました。 とりあえず「vagrant status」をおすと
Current machine states: default inaccessible (virtualbox) The VM is inaccessible! This is a rare case which means that VirtualBox can't find your VM configuration. This usually happens when upgrading VirtualBox, moving to a new computer, etc. Please consult VirtualBox for how to handle this issue. PS C:\Users\nonak\MyVagrant\MyCentOS> vagrant suspend
と出てくるどうやらVirtualBoxの問題らしい、、、 いろいろ調べたら解決法が見つかりました。
VirtualBoxのVMが格納されてるディレクトリのファイルの拡張子を変更します。 VMとは[Virtual Machine]という意味です。
Windowsの場合 C:Users/ユーザー名/VirtualBox/VM名
この中に入っているVM名.vbox-tmpの拡張子をVM名.vboxに変えればOK
あとはvagrant upをすればいつも通りに戻るはずです。
以下サイトを参考にさせて頂きました。 どうやらPCをシャットダウンする前にしっかりとvagrantを終了していないことが原因のようですね、以後気をつけます!
いやー、、焦った~
vagrantを利用したCakePHP2系の環境構築
一筋縄ではいかない仮想環境でのセッティング
CakePHPの学習を始めて環境構築で何かと苦労したので手順等を載せたいと思います。 今回苦労したのが仮想環境でCakePHPを利用するという点でした。
ドットインストールを参考に進めると捗ると思います。
http://dotinstall.com/lessons/basic_cakephp
.1 CakePHP2系のインストール
.2 FTPサーバーへデータを転送
.1 CakePHP2系のインストール
2017/5/14現在でCakePHPの最新は3系になっているので、2系をダウンロードするにはGitHubを使う必要があります。
GitHub - cakephp/cakephp at 2.x
このページで「Clone of download」 「Download ZIP」 でzipファイルをダウンロードしてください。
上手くダウンロード出来たら解凍してください。
.2 FTPサーバーへデータを転送
FTPはCyberduckを使って説明します。 ファイルを転送する前に、編集から環境設定をおして
「ブラウザ」から'.‘で始まるファイルを表示のチェックを入れます。
それが出来たら先程インストールしたファイルを転送します。
とりあえずはここまでで、また何かあれば記事を上げていきます。
MySQL HAVING句とORDER BY句についてまとめてみました!
条件指定と並び替え
HAVING句とORDER BY句の使い方等の説明を書いていきます。
HAVING句
まずSQL文にはGROUP BY句というものがあります、簡単に説明しますとGROUP BY句とはあるフィールドを選択してそのフィールドごとに出力するという意味があります。
GROUP BY句を使ったときに当然、条件検索(WHELE句)も使えるのですがWHELE句はレコードに対する条件指定しかできません。 集約関数を使った検索などを行いたいときにHAVING句を使います。
レコードに対する条件指定が WHELE句
グループに対する条件指定が HAVING句
と覚えるといいかと思います。
HAVING句の使い方の説明としまして以下のようなテーブルがあるとします。
mysql> SELECT * FROM items; +----+-----------+---------+-------+ | id | category | name | price | +----+-----------+---------+-------+ | 1 | food | salad | 200 | | 2 | food | meat | 1400 | | 3 | book | novel | 600 | | 4 | book | comic | 420 | | 5 | clothes | coat | 20000 | | 6 | clothes | jacket | 7000 | | 7 | clothes | bottoms | 6000 | +----+-----------+---------+-------+
まず商品のカテゴリーごとの合計金額を求めたいときはGROUP BYを使います。
mysql> SELECT category,sum(price) FROM items GROUP BY category; +-----------+-------+ | category | price | +-----------+-------+ | food | 1600 | | book | 1020 | | clothes | 33000 | +-----------+-------+
続いて合計金額が1500円以上のカテゴリーを求めたいときはHAVING句を使います。
mysql> SELECT category,sum(price) FROM items GROUP BY category HAVING sum(price) >= 1500; +-----------+-------+ | category | price | +-----------+-------+ | food | 1600 | | clothes | 33000 | +-----------+-------+
お分かりの通りbookのレコードが消えます。
このようにグループに対しての条件指定をしたいときに使うのがHAVING句になります。
ORDER BY句
こちらは使い方としてはシンプルで表示の並び替えをするものになります。 WHERE句、GROUP BY句、HAVING句とは違い検索には関わらないので、まずは自分が視覚的に見やすくするものと思ってください。 先ほどのテーブルを使って説明していきます。
商品の金額の降順に並び替えてテーブルを見たいと思ったときは以下のようにします。
mysql> SELECT * FROM items ORDER BY price desc; +----+-----------+---------+-------+ | id | category | name | price | +----+-----------+---------+-------+ | 5 | clothes | coat | 20000 | | 6 | clothes | jacket | 7000 | | 7 | clothes | bottoms | 6000 | | 2 | food | meat | 1400 | | 3 | book | novel | 600 | | 4 | book | comic | 420 | | 1 | food | salad | 200 | +----+-----------+---------+-------+
重要なのは 「desc」とつけると降順 「asc」とつける、もしくは何もつけないと昇順で表示されます
GROUP BY句などと組み合わせて使うこともできます。
mysql> SELECT category,sum(price) FROM items GROUP BY category ORDER BY price desc; +-----------+-------+ | category | price | +-----------+-------+ | clothes | 33000 | | food | 1600 | | book | 1020 | +-----------+-------+
このように「category」ごとの合計金額(price)の降順で表示されます。
今回の記事を書くにあたり「ゼロから始めるデータベース操作 SQL」という本を参考にさせて頂きました。 www.shoeisha.co.jp
以上になります。