院生エンジニアのにっき

  • Change style to Blue
  • Change style to Red
  • Change style to Green
  • Change style to Pink

2007-09-24 CakePHPの解説のある書籍

CakePHPについての紹介されている書籍についてまとめてみました。

バージョンアップの激しいオープンソースの書籍を読む場合はバージョンを気にしなくてはいけなく、CakePHPの場合は1.1系か1.2系かなどで構成が大きく異なる時もありますが、CakePHPそのものの雰囲気を巨視的に体感するには書籍はお勧めかもしれません。


  続きを読む

コメント(0)

2007-07-14 CekePHPにて、Model・View・Controllerを複数のパスで呼ぶ

なんでも、Model・View・Controllerのパスは複数指定することができるそうです。

http://www.mono-space.net/blog/php/e070409_mvc_path.htm(Model,View,Controllerを共有する)

/app/config/bootstrap.phpに記述するのですが、なんとbootstrap.phpの一番下に以下のような記述がありました(常識??)

  1. /**
  2. * The settings below can be used to set additional paths to models, views and controllers.(下のように設定を書いたらmodel・view・controllerに追加のパスを設定できるよ)
  3. * This is related to Ticket #470 (https://trac.cakephp.org/ticket/470)
  4. *
  5. * $modelPaths = array('full path to models', 'second full path to models', 'etc...');
  6. * $viewPaths = array('this path to views', 'second full path to views', 'etc...');
  7. * $controllerPaths = array('this path to controllers', 'second full path to controllers', 'etc...');
  8. *
  9. */


  続きを読む

コメント(0)

2007-07-02 CakePHPのURLの改造

環境はCake1.2系なんですが、URLをhttp://life-hack.jp/blog/charly/

のようにプロジェクト名の次にユーザ名を全部のURLに入れたい場合があると思います。

ブログシステムなどを作る場合などはドメイン/ユーザ名/controller/actionにしたい場合も多いかと思います。

しかし、Cakeのデフォルトではプロジェクト名(ディレクトリ名)の次には基本的にcontrollerが来るようにできていて、http://life-hack.jp/blog/charly/16のようにすることで存在しないページを自動でリダイレクトする仕組みは作れても、ユーザ名などを全コントローラの前に挿入することは面倒となってしまいます。

そこで、CakePHPコア部を改良することでURLに毎回ユーザ名を入れれるようにしてみたので紹介します。


  続きを読む

コメント(0)

2007-06-26 ブログシステム機能追加

「一覧リスト」と「メール送信」機能を追加しました。


「一覧リスト」はサイトマップ的なSEOの効果を見込んでいます。


こうやってちまちまと機能追加しているのですが、このブログシステム、将来的にはソース(CakePHPベース)は公開するつもりです。


現在簡易テンプレートシステムは完成しているのですが、デザイナーさんがインストールして自分でテンプレートを触れるレベルまで作りたいと思っています(現状はCakePHPを理解していないとテンプレートがいじれないんで・・・)。



  続きを読む

コメント(0)

2007-06-19 CakePHPにて、テーブル情報のdump

CakePHPを用いて様々なローカル環境で作業しているのですが、Cakeの特性上かわかりませんが、存在しないフィールドやテーブルにアクセスしようとしたら落ちてしまう場合があります。

そこでテーブルのインストーラがあれば、常にテーブル情報が最新に保てるようになると思い、その第一弾としてテーブル情報のdumpプログラムを作りました。

インストーラの作成予定ですが、

  1. 現在のテーブル情報をdumpできるようにする
  2. 最新のテーブル情報と現在のローカルのテーブル情報の差分を表示する
  3. 差分を修正する(更新する)ロジックを作成

とまぁこんな感じでしょうか。

ローカルとサーバーで常にテーブル状態を同期すればいいだけなんですが、それがなかなか面倒でして、設定ファイルさえ用意すれば(その設定ファイルはグラフィカルに編集可能)常に最新のテーブルを保てると同時に、システムをパッケージとして提供する際のインストーラも作成できるかと思っています(実際そううまくはいかないものですが・・・)。ただ、テーブル情報の簡易dumpは有用かと思ったので今の段階で公開することにします。


  続きを読む

コメント(2)

2007-05-21 CakePHP1.2のBehaviorを使う

CakePHPの1.2系から導入された(1.1系でもディレクトリだけは存在したw)「Behavior」、これでController→Component、View→Helper、Model→Behaviorという住み分けが完成したそうです。

そこでこのBehavior、何が出来るかというと他のComponentやHelperと同じようにMVC各クラスに共通機能を追加するためのモジュールとなっています。

CakePHP1.2ではデフォルトで/libs/model/behaviorsにacl.php、translate.php、tree.phpが入っていて、Modelクラスに追加できるようになっています。

ユーザが作成したBehaviorクラスは/app/model/behaviorに置くのですが、modelクラスでのBehaviorの利用法が他のControllerクラスやViewクラスと異なっていたため若干はまりました。。


  続きを読む

コメント(0)

2007-05-12 CakePHPで存在しないcontrollerが指定された際にデフォルトのcontrollerクラスを利用する方法

現在作成中のBlogシステム(http://life-hack.jp/blog/charly)はCakePHPで作られているのですが、HatenaDiaryの仕組みを元にしているため、最後の「charly」の部分はユーザーIDとなっています。

しかし、CakePHPは不便なことにルートディレクトリ(この場合は「http://life-hack.jp/blog/」)の次のディレクトリ(この場合は「charly」)をコントローラークラスの名称だと認識してCharlyControllerを探しに行きます。

当然CharlyControllerは見つからないため「Missing Controller」となるわけです。

Missing Controllerを対処するためには

  1. 指定のcontrollerクラスが存在する
  2. /app/config/routes.phpをいじって指定のcontrollerクラスに値を渡せるようにする

の2通りが考えられます。

今回の目標ははBlogControllerに引数として「charly」とそれ以降の引数を渡すことです。


  続きを読む

コメント(0)

2007-05-12 CakePHPにてdatabase.phpのTips

SVNを使っていたりFTPで一括でアップロードする際にローカル環境とサーバー環境が違うためアップロードしたとたんにエラーになるのを防ぐ方法

まぁアップロードする際にdatabase.phpをフィルタリングする設定にすることでも事足りるんですが。

  1. app/config/database.php
  2. <?php
  3. class DATABASE_CONFIG
  4. {
  5.   var $default;
  6.   function __construct() {//ローカル環境での設定
  7.     if(FULL_BASE_URL == 'http://localhost'){
  8.       $this->default = array('driver' => 'mysql',
  9.         'connect' => 'mysql_connect',
  10.         'host' => 'localhost',
  11.         'login' => '***',
  12.         'password' => '***',
  13.         'database' => '***',
  14.         'prefix' => '***');
  15.     } else {//サーバー上の設定
  16.       $this->default = array('driver' => 'mysql',
  17.         'connect' => 'mysql_connect',
  18.         'host' => 'localhost',
  19.         'login' => '***',
  20.         'password' => '***',
  21.         'database' => '***',
  22.         'prefix' => '***');
  23.         }
  24.     }
  25. }
  26. ?>

どこかで同じ事をしていた人を見ましたが、メモってことで。

if(FULL_BASE_URL == 'http://localhost')を用いることによって様々な場面でローカルならこう、サーバーならこうっていうロジックを作成できます。

ちなみに自分の場合はGoogle AdSenseをローカルでは非表示にして、サーバーでは表示するなどといった作りをしています(誤クリックで利用停止になりたくないんで・・・)。←IPやらではじくようにする方が絶対ですが、色んなPCを使ってアクセスするんで開発環境では・・・ってだけ分けてます。


コメント(0)

2007-05-11 CakePHPより、str_replace

  1. <?php
  2. function str_replace_ex($replace,$text){
  3.         $out = str_replace(array_keys($replace), array_values($replace), $text);
  4.         return $out;
  5. }
  6. echo str_replace_ex(
  7.         array(
  8.                 'search1' => 'replaced1',
  9.                 'search2' => 'replaced2',
  10.         ),
  11.         'search1とsearch2'
  12. );
  13. //出力: replaced1とreplaced2
  14. ?>

なるほどと思うTipsでした。 From CakePHP


コメント(0)

2007-05-06 ブログシステム一応完成

トラックバック・コメント機能はまだ未実装ですが、hatena記法の一部を実装できたので一応の完成とします。

hatena記法で実装した機能は以下のとおり

  • 見出し記法「*→h3」「**→h4」「***→h5」
  • リスト記法「-~~」「+~~」「--~~」・・・
  • スーパーpre記法(シンタックス・ハイライト)「>|php|~~||続きを読む記法「==== →それ以降を「続きを読む」に」
  • 注釈記法「((~注釈のテスト~))」


  続きを読む

コメント(0)