Cakephp・AuthComponentでusersの値を取得する際の注意

初心者がCakephpをやる件で以前にAuthComponentを実装しました(参考:CakePHPのAuthComponent実装+ブラウザ閉じても認証保持)。
DBにusersテーブルを作成しusernameとpasswordフィールドがあれば、それを使用して簡単にユーザー認証が作れてしまいます。
さらにログイン後には、
$this->Auth->user('username');
で簡単にusersの特定の値を取得できます。
ただし1点、注意が必要なことがありました。
それはログイン後にusersテーブルをUPDATEした場合は、$this->Auth->user()で値を取得しても、それはログイン時点のものになります。
例えば「usersテーブルにあるnicknameフィールドを取得する」場合。
$this->Auth->user('nickname');
上記ではログイン後にnicknameを変更しても反映されません。
(ログイン後に「ようこそ○○さん」のような表示をしている場合、ニックネームを変更しても反映されずに「あれ?」となる)
回避方法は以下の2点。

続きを読む

Cakephpのよく使う処理をまとめる

初心者がCakephpをやる件、ガシガシと進めています。
難しい処理は後回しにしてDBの出入力を中心に目標の7割方できてきました。
DBに関わる処理はselect、insert、deleteなど限られるわけですが、あちこちからコピペしたためか、全体的に記述が統一されていません。
ここで復習を兼ねて全ソースを見直し、整理して自分なりの構文をまとめてみました。

●値の取得(複数)

条件に合致した値を取得してviewに渡す処理。
$cond = array('post.user_id' => $this->Auth->user('id'));
$data = $this->Post->findAll($cond, null, 'Post.created desc');
$this->set("data", $data);

・findAll(条件式,取得フィールド(nullで全て),取得順序)
・例はAuthComponentでログインしたユーザーと同じidのPostデータを取得。
なお上2行はこっちでも同じ処理。わかりやすいかもしれない。
$data = $this->Post->findAllById($this->Auth->user('id'), null, 'Post.created desc');
findAllByIdAndPasswordというand条件にしても直感的でわかりやすい。

●値の取得(1件のみ)

条件に合致した値を1件のみ取得する。パラメタを指定してのedit、deleteのときによく使う。
function edit($id){
$this->Post->id = $id;
$data = $this->Post->read();

なお上2行はこっちでも同じ処理。わかりやすいかもしれない。
$data = $this->Post->findByid($id);

●DBへのデータ保存

insertのとき
$data = array(
'Post' => array(
'title' => $this->data['Post']['title'],
'body' => $this->data['Post']['body'],
'post_date' => $this->data['Post']['post_date'],
)
);
$this->Post->save($data)

updateのとき
$data = array(
'Post' => array(
'title' => $this->data['Post']['title'],
'body' => $this->data['Post']['body'],
'post_date' => $this->data['Post']['post_date'],
)
);
$this->data['Post']['id'] = $id;
$this->Post->save($data)

updateのときはidを指定する。
また更新する値だけを$dataに記述しないと、任意の値を書き換えられることになるのでセキュリティ的に問題あり。
色々と試行錯誤してきたけど、難しいことしなければこれだけで済むのか・・・。
ソースコードの見直し(リファクタリング)も楽だったし。
cakephpすげー。

PHP開発環境にEclipseをセットアップ

初心者がCakePHPを学ぶ件、今回は開発環境について。
これまではお手軽な開発環境「PHPエディタ」を使用していました。
PHPエディタ – フリーのwindows用php統合開発環境 – phpspot
インストールや設定もわかりやすく良かったのですが、新規ファイル作成をする際はPHPエディタ上で行わなければならないという欠点がありました。
また、もう少しプロっぽい開発環境を使ってみたくもあり代表的なPHP統合開発環境を調べてみました。
PHP開発ツール 比較調査 – KABOSU
商用、無料を含めた開発ツールが比較されています。
こちらで無料かつオススメとされていたPDT(Eclipse PHP Development Tools)にチャレンジします。

続きを読む

アクセス解析:はてブ VS ニュースサイト VS Yahoo!ニュース


1日のPVが100前後の弱小ブログでも長いことやっていると珍しいことがあるものです。
8月、9月と当ブログ記事がスポットを浴び、一時的に多くのアクセスがありました。
8月は技術系・サブカルの雄はてなブックマークと個人ニュースサイトeverything is goneで取り上げられ、9月にはウェブ世界のメインストリームYahoo!ニュースで紹介されました。
それぞれ一夜にして数千のアクセスがあったのですが、果たしてどのような違いがあったのか。
Yahoo!ログールのアクセス解析データを元にまとめたいと思います。
※Yahoo!ログールの訪問者データはYahoo!JAPAN IDにひも付いたデータのようです。
※サンプルの性質が異なるので単純比較はできません。参考としてお考えください。

8月16日:はてブでホットエントリー入り

8月16日にはてなブックマーク – 人気エントリーに入りました。
該当記事は私、西馬込住人だけど
元ネタ「Google Street View がキモイ問題その3 – 捨身成仁日記 炎と激情の豆知識ブログ!」に対しての返歌としてトラックバックしたのがきっかけです。
たまたまGoogleストリートビューから近所(西馬込)が抜け落ちていたので、何かネタにできないかと思った次第。
その時のYahoo!ログールのアクセス解析はこちら。
(グラフ1つ目の山)
hatena-book.gif
hatena-zokusei.gif
社会属性としては30代が過半数、その次に20代。一部に女性を含むアクセスがあり、1日のPVは2,200近くになりました。

8月21日:everything is goneで紹介

西馬込の記事はその後も各所のブログからリンク、また画像はtumblerで引用されながらアクセス数は漸減傾向となります。
そして数日後の8月21日、個人ニュースサイトで有名なeverything is goneで同記事が再び取り上げられます。
PSP-3000正式発表とか 8/21News – everything is gone
(グラフ2つ目の山)
hatena-book.gif
eg-zokusei.gif
この時は20代を中心に男性のみのアクセスで、再びPVは約1700となりました。
どうやら、はてなとは違う層の方が訪れたようです。
(はてなで既に同記事を閲覧していた人がアクセスしなかった(除外された)可能性もあります)
「ホットエントリー入りするための○○の方法」などと話題になる、はてなブックマークですが、大手の個人ニュースサイトにも同じくらいの影響力がありそうです。

9月18日:Yahoo!ニュースに掲載

はてブの余波も落ち着いた約1ヵ月後、突如当サイトのアクセスが急増します。
リンク元を確認すると、そこには1分ごとに到達するyahoo.co.jpのリファラが!
8月下旬に旅行した鹿児島の記事【篤姫】鹿児島に行ってきた【桜島】がYahoo!ニュースの篤姫特集の一部に「鹿児島を観光で訪れた人のブログ」として紹介されていたのです。
Yahoo!ニュース – バックナンバー(Googleキャッシュ)
3つ紹介されたうちの上位2件はYahoo!ブログであり、なぜ3つ目に選ばれたかは不明。
このYahoo!ニュース自体はエンターテインメントカテゴリーの一部ですが、一時的にYahoo!トップのトピックスにも掲載されたようで、その影響力は絶大。HTML生成型である当ブログが一時的に重くなっていました。
yahoo-link.gif
yahoo-zokusei.gif
最終的に1日のPVは4200にもなりました。
30代を中心に、女性も一定の割合を占めています。
ただしこのアクセスには継続性がなく、Yahoo!のトップからはずれ、また記事がバックナンバーに移るとアクセスは急減しました。
なお、この日のYahoo!ログールのランキングでなんと14位にランクイン。
うはー、有名サイトがごろごろ。
ranking.gif
しかし1位には404 Blog Not Foundのdankogaiさんが20,000以上のPVで燦然と君臨しているのでした。

まとめ

以上3つのアクセスを比較したグラフとまとめです。
hikaku.gif
・Yahoo!ニュースの影響力は絶大(はてなブックマークの2倍以上)。
・ただしYahoo!ニュースのアクセスは瞬間的で継続性がない。
・はてな、ニュースサイトには他サイトへの波及効果があり、アクセス数は漸減傾向となる。
・常時20,000以上のPVを叩き出すdankogaiさんは変態だ。
なお1日のPVが100前後だった当ブログも、これ以降にPVが2倍以上となりました。
上記の記事からの引き続きの来訪もありますが、SEO効果が高まり検索エンジンにヒットするようになったのかもしれません。

おまけ

Amazonアフィリエイト、Googleアドセンスの効果をみると、はてブでのホットエントリー入りはまったく影響なし
一方でYahoo!は通常時の20倍の効果が。
経済的効果は圧倒的にYahoo!なのでした。
参考
媒体資料で見るはてなユーザー像 – 19790401173.4
媒体資料に見るはてなユーザー像。サンプリングが今回のケースと異なりますが、女性も年齢層も異なる。
はてブは、はてなの中でも異界?

CakePHPのAuthComponent実装+ブラウザ閉じても認証保持

初心者がCakePHPを使った開発を進めます(これまでのCakePHP)。
CakePHPガイドブックを参考に基本的なアプリができたので、これを自分色に染めていきます。
まず認証周りを強化したい。そこでCakePHPの1.2から用意されたAuthComponentという認証に便利なコンポーネントを実装してみました。
参考サイトは下記。ここのコードをコピーすれば基本的に問題ありません。
【CakePHP】AuthComponentについてのまとめ 【ざっくり基本編】 | ねねとまつの小部屋
【CakePHP】AuthComponentについてのまとめ その2【ちょっとしたコツ編】 | ねねとまつの小部屋
あとCakePHPの公式マニュアルも詳しいです。
The Cookbook :: 1.2 Collection :: マニュアル :: 組み込みのコンポーネント :: 認証
ただ、小生の場合はCakePHPガイドブックにあったSessionでの認証を実装していたので、それを外す作業が必要でした。
以下自分メモ。ガイドブックからの変更点など。

続きを読む

  • 他のブログ

    育児で買ったモノたち
  • Twitter

  • 最近の投稿

  • 最近のコメント

  • はてなブックマーク

  • RSS購読

    RSS Feed RSS - 投稿

  • カテゴリー

  • 月別

  • カレンダー

    2017年3月
    « 2月    
     12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
  • プロフィール


    健康・医療系の出版社でウェブに関わる営業企画と浅い技術。Webディレクター?
  • キーワード検索