標準装備のページング機能paginate()

2008/03/22 | cakePHP

とりあえず久々にcakePHPに取り組んでいるが、ぜんぜん思い出せない。1.2ベータにチャレンジしたのが無謀ともいえないではないけれど、いまさら1.1を始めるのもちょっと・・・。

基本的なところは放置して、まずはテーブルを作成してbake。出来上がったスクリプトを覗くところから始める。ここでコントローラの記述に注目。1.1のときはなかったメソッドがいきなり出てくる。

function index() {
  $this->Site->recursive = 0;
  $this->set(‘sites’, $this->paginate());
}

sitesというテーブルを作ってbakeしてみた。上記はテーブル中のデータを一覧表示させるメソッドだ。この中の最初の行は見覚えがある。

$this->Site->recursive = 0;

sitesテーブルとリレーションのあるテーブルからデータをとってくるかどうか(とってくる階層を指定)。デフォルトは関連テーブルからのデータ取得はしない設定になっている。ここは問題なし。

2行目で新メソッドが出てくる。$this->paginate()。たしか前はfindAllメソッドが呼び出されていた箇所だ。まぁ、しかしメソッド名から想像はつく。findAllにページング処理が追加されたものだ。いきなり便利になっている。すばらしい。どういう処理になっているのか詳しく知りたいわけではないが、いちおう調べてみる。継承元の以下のファイルを調べる。

cake/libs/controller/controller.php

とりあえずpaginateで検索すると変数の定義がでてきた。

var $paginate = array(‘limit’ => 20, ‘page’ => 1);

ページング関連の設定でデフォルトで1度に取得する行数を20として、ページ番号の指定がなければ1ページ目をとってくる、ということだろう。変更したければ作成したコントローラに上記の一行を書き加えて、適宜数値を変えればよさそうだ。

で、更に検索してpaginateメソッドが出てくる。どうやら以下の引数をとるようだ。

function paginate($object = null, $scope = array(), $whitelist = array()) {
  (プログラムが書かれている)
}

ここも詳しくはわからないけれど、SQLのwhere句などを記述できそうだ。今はまだサンプルが見つけられないので、自分で適宜試してみるしかなさそうだ。

ちなみにbakeしたスクリプトにウェブからアクセスして1行追加してみた。データが追加されるのは当然だけれど、createdにデータ作成日時が自動挿入されない。たしかここは何も入力しなくても勝手にやってくれるはずだったと思ったのだが・・・。

当面試行錯誤が続きそうだ。

cakephp1.2でのbake

2008/03/20 | cakePHP

久々のcakePHPで、バージョンが前回と違うので少し戸惑っている。記述方法とかぜんぜん思い出せないし。

そこはcakePHP、Railsの流れを汲むのだからスクリプトを自動生成!、と思ってbake.phpを探して以前と同じように

/usr/local/bin/php bake.php

とやってみたがエラーが出て動いてくれない。bakeがなくなるわけはないだろうし・・・動かし方が変わったのだろうか。
しばしの検索の結果、動かし方が変更になったことがわかった。

/usr/local/bin/php ./cake/console/cake.php bake

これでとりあえずモデル、コントローラ、ビューの自動生成ができた。bake.phpも進化しているようで、以前はモデル、コントローラ、ビューの3つだけを自動生成できていたけれど、1.2ではさらに2つメニューが増えているようだ。メニューの一覧はこんな感じ。

[D]atabase Configuration
[M]odel
[V]iew
[C]ontroller
[P]roject
[Q]uit

「Database Configuration」はなんとなく想像もつきそうだが、Projectってなんだろう。まぁ、おいおい試してみよう。

cakePHP1.2ベータ版をインストール

2008/03/19 | cakePHP

新しいサイトを作ることにした。
毎度考えるのが、WordPressを使うか、その他のCMSを使うか、フレームワークを使うか、フレームワークなら何を使うか・・・。悩みはつきない。
WordPressは速度の問題で悩んでいるところなのでパス。その他のCMSだととりあえずメジャーどころのXoopsだが、結局使いにくい。今回は特に単機能に特化したサービスを立ち上げる予定なので、Xoopsなんかは不向き。で、どのフレームワークを選ぶか、というところで悩む。

Zend FrameWorkを使ってみようか悩むところだが、今回はcakePHPを使うことにした。どうもZend FrameWorkを使うような場面に遭遇しない。もっとライトウェイトなフレームワークがほしいところだ。今回はバージョン1.2がベータ段階になっているのでこちらを採用。そしてインストール(といってもFTPするだけ)。

ファイルをダウンロードして解凍後、FTPにてサーバにアップ。最低限の設置はこれにて完了。ファイルはドメインのドキュメントルートに丸ごとアップロードした。で、早速ブラウザでアクセスした。
cakePHPが親切だと思うのは、この何もしていない状態でアクセスすると、やるべきことをメッセージで教えてくれるところだ。言ってみれば手動のインストーラでもあるわけだが・・・。まずやることが書いてある(エラーは黄色で書かれている)。

Please change the value of ‘Security.salt’ in app/config/core.php to a salt value specific to your application

とのことだ。これは何か適当に文字列を入れておけばよさそうだ。
そして次のメッセージ。

Your database configuration file is NOT present.
Rename config/database.php.default to config/database.php

データベースの設定をしてくれとのこと。用意しておいたデータベースの設定を書き込んだ。修正したファイルをアップロードしてサイドアクセスすると、エラーの黄色がなくなった。つまりこれでインストール完了だ。

さて基本構造はおそらく全バージョンと同じだと思うので、違いを見つけてこのブログにメモしていくことにする。

渡された値に対して、常に同じ処理をかける

2008/01/15 | guesswork

年末・年始・・・気がつけば2週間ブログの更新をお休みしてた。

フレームワーク「guesswork」。好調に開発を進めている。かなり使いやすい。まもなくPHP4のサポート期限が切れるので、PHP5対応の新バージョンが待たれるところだ。いちおう原稿バージョン(0.0.3)でもPHP5で動作するとのことなので、さほど気にはしていないのだが・・・。

guessworkで、外部からGETやPOSTで渡された変数に共通した処理を加える機能を実装した。やり方としては、適当な名前でControllerクラスを継承したクラスを作成し、その中に共通処理を記述した。以後、基本的に、この新しく作ったクラスを読み込んで継承していく作りとなる。

<?php
require_once(dirname(__FILE__).’/../Guesswork.php’);
class myController extends Controller
{
  function init()
  {
    $this->cleanup();
    // DB接続などはここに記述
  }

  function cleanup()
  {
    $this->_gw_params=$this->recursiveCleanUp($this->_gw_params);
  }

  function recursiveCleanUp($params)
  {
    foreach($params as $param => $value){
      if(is_array($value)){
        $value=$this->recursiveCleanUp($value);
      }elseif(is_string($value)){
        $value=trim($value);  // ここに共通処理をかく
      }
      $params[$param]=$value;
    }
    return $params;
  }
}

配列で値が渡された際に、再帰的に処理しているところがミソ。あと、_gw_params変数を見つけたのがよかった。
快適。

軽量フレームワークguesswork

2007/12/26 | guesswork

今回新たな開発案件でguessworkを採用することにした。
データベースアクセスや認証については、外部のライブラリに頼らないといけないが、本当に必要最小限のMVCをルールにのっとって操作できるというところが素敵なフレームワークだ。
たいていのフレームワークの場合、ディレクトリ構成をきちんとルール付けすることによって、余計な設定ファイルを記述しなくてもいいようになっているわけだが、このguessworkは別。基本的にファイルを自由自在に配置できるようになっている。
ウェブアプリの開発には2種類あって、ウェブサイトの管理そのものを開発者だけ(+理屈のわかっているコーダ)が管理するタイプと、開発者が管理にかかわるが、コーダがどんどん勝手にコーディングも更新してしまうタイプ。前者の場合は、サイトを管理する立場の人はいろんなタイプはあるけれど、基本的に「ルールを理解してくれる人」で構成されている。後者はたいていの場合「複雑なルールは面倒」と思う人で構成されている。前者の場合は、フレームワークでありがちな制約を理解してくれる可能性が高いが、後者の場合は、自由にファイルを配置したい、と思う人が多いはずだ。
今回の案件では、どちらかというと後者のタイプで開発を進めるほうがよいと判断したのだ。
軽量で、機能を極力減らしてあるフレームワークだけあって、理解するのは簡単だ。現在は「テンプレートエンジンを使用せず(デフォルトはSmarty)」、「データベースはADODBで」開発している。認証ロジックはまだ検討中だ。

基本的にはcakePHPで通しておきたいというのもあるが、やはり臨機応変でその場に適したフレームワークを使うというのが一番ベストだと思う。PHPのフレームワーク自体は基本的にmojaviからスタートしているわけだから制約がたくさんある(制約から抜け出すためには理解する知識が必要)。内容を理解しなくても、ある程度のアプリを書くことができるguessworkは、ある意味おさえておきたいPHPフレームワークのひとつだろう。

今後は開発していく上ででてきたTips等々を紹介することにする。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net