情弱エンジニアのなかのblog

一人前のエンジニアになる為のブログです

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を見ます

f:id:nonaka-katuma-hal:20170521200556j:plain

そこにhttpsのURLかSSHを確認できるところがあると思うのでSSHの方をコピーします。

$ git remote set-url origin ここに先ほどのSSHを貼り付けます

これでもう一度git pushをしてみてください。

3.Bad owner or permissions on /home/vagrant/.ssh/config

公開鍵を設定し直してみてください。このサイトに詳しく書いてあります。

monsat.hatenablog.com

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.まとめ

MVC命名規則の基本となる考え方は以下になります。

  • モデル名だけは単数形、それ以外でデータベースのデータを扱う名前は複数形にする
  • クラスとして定義されるものはキャメル記法、クラスとは直接関係ないものはアンダースコア記法にする

モデルは単数形ですが、それ以外のものは、多数のデータを扱うわけですから複数形で命名するのが基本です。

テーブル名やモデルを利用するコントローラ名は複数形になっていまして、モデルやコントローラなどクラスとして定義されるものはキャメル記法ですが、テーブルやビューテンプレートのようにクラスでないものはアンダースコア記法になります。

長々と書きましたがやはり理解して使っていくことが大切だと思います。 以上になります。

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の問題らしい、、、 いろいろ調べたら解決法が見つかりました。

VirtualBoxVMが格納されてるディレクトリのファイルの拡張子を変更します。 VMとは[Virtual Machine]という意味です。

Windowsの場合 C:Users/ユーザー名/VirtualBox/VM

この中に入っているVM名.vbox-tmpの拡張子をVM名.vboxに変えればOK

あとはvagrant upをすればいつも通りに戻るはずです。

以下サイトを参考にさせて頂きました。 どうやらPCをシャットダウンする前にしっかりとvagrantを終了していないことが原因のようですね、以後気をつけます!

姫路のホームページ製作屋WILDWEST-SERVICE

いやー、、焦った~

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ファイルをダウンロードしてください。

f:id:nonaka-katuma-hal:20170514143220j:plain

上手くダウンロード出来たら解凍してください。

.2 FTPサーバーへデータを転送

FTPCyberduckを使って説明します。 ファイルを転送する前に、編集から環境設定をおして

f:id:nonaka-katuma-hal:20170514143319j:plain

「ブラウザ」から'.‘で始まるファイルを表示のチェックを入れます。

f:id:nonaka-katuma-hal:20170514143639j:plain

それが出来たら先程インストールしたファイルを転送します。

とりあえずはここまでで、また何かあれば記事を上げていきます。

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

以上になります。