Home > PHP

PHP Archive

titleにsetできない件@CakePHP

実際に CakePHP を使ってみたので、つまづいたところを中心にメモ。

■ title に set できない
Bake した後、適当に見出しを変更しようと思って index.ctp の h2 タグを修正してみました。

  1.  <h2><?php echo $title ?></h2>

Controller で set しておきます。

  1.  <?php
  2.   $this->set(’title‘, ‘CakePHP を使ってみたよ!’);
  3.  ?>

これが表示できない。そんな変数しらないよ。って怒られる。
理由は Controller#set にありました。

  1.  <?php
  2.  if ($name === title) {
  3.      $this->pageTitle = $value;
  4.  } else {
  5.      if ($two === null && is_array($one)) {
  6.          $this->viewVars[Inflector::variable($name)] = $value;
  7.      } else {
  8.          $this->viewVars[$name] = $value;
  9.      }
  10.  }
  11.  ?>

‘title’だけ特別扱いしてる。
‘title’に set すると pageTitle に値を入れてくれるんだねー、って誰が言った?

少なくともマニュアルの「4.5.4 コントローラのメソッド」の set の項には書いていないし、API にも書かれていない。
pageTitle への値の設定はマニュアルにも

$this->pageTitle = “hogehoge”;

となっているし、個人的にもこの set の挙動は不可解。

技術書:CakePHP1.2ガイドブック

速く、安全で、拡張性のあるフレームワークCakePHPは、メンテナンスの必要なコード量を減らし、丈夫なWebアプリケーションの構築に必要とされる大半の機能を扱う仕組みを提供します。本書は、高速開発を「PHPらしく」実現するフレームワークを現場のプロが導入から実践、拡張まで徹底解説します。

業務で使っているわけではないのですが、ちょっと勉強してみたくなり購入。

フレームワーク本ですが、すごく丁寧に解説されている印象なので Web アプリ一般の勉強をしてみたい人に良いかもです。
CakePHP に関していえば、概要を知りたい人向け。リファレンスには弱いか。

やっぱりフレームワークを勉強するには Try & Error が最適なのでしょうしね。

CakePHP1.2ガイドブック
CakePHP1.2ガイドブック

Eclipse3.5 ついでに PDT2.1 リリース

  • 2009-06-25 (木)
  • PHP
  • このエントリーを含むはてなブックマーク | はてなブックマーク登録数

Eclipse3.5 ついでに PDT2.1 がリリースされました。

PDT 2.1

とりあえず、PDT2.1 の変更点だけ紹介しておきます。

・ PHP5.3 に対応しました
・ 各種バグを直しました

以上。

ってしょっぱく見えますが、PHP5.3はかなり大きな変更もあるメジャーに近いマイナーバージョンアップです。

なので PHP5.3 を使おうとしているユーザーにはうれしいバージョンアップなのではないでしょうか。

バグもかなり直されているのでそれ以前の PHP を使っているユーザも乗り換えれば良いじゃない。

Google Calendar と iスケジュールをほげってみた(続き)

えっと、このサイトは技術系サイトなので、ちょっと技術的なフォローしておきます。

今回 Google Calendar に接続するにあたり、使うことにしたのが Zend_Gdata というライブラリです。

この API は phpdoc で公開されているのですが、これがどうにもがっかりな使えなさっぷりなので、マニュアルを読んでもよくわからなかった点をまとめときます。

■ Google Calendar から取得できるデータ
Google Calendar から取得した1件のスケジュールデータはZend_Gdata_Calendar_EventEntry です。
このクラスから主要な情報を取得する方法は以下のようになります。

  1.  <?php
  2.  $eventFeed = $service->getCalendarEventFeed($query);
  3.  foreach ($eventFeed as $event) {
  4.      // タイトル
  5.      $summary = mb_convert_encoding($event->title->text, SJIS, UTF-8);
  6.      // 更新日時("2009-02-27T16:53:43.000Z")
  7.      $upd     = $event->updated->text;
  8.      // 開始日時(2009-03-27T10:00:00.000+09:00)
  9.      $start    = $event->when[0]->getStartTime();
  10.      // 終了日時(2009-03-27T11:00:00.000+09:00)
  11.      $end     = $event->when[0]->getEndTime();
  12.      // 場所
  13.      $location = mb_convert_encoding($event->where[0]->getValueString(), SJIS, UTF-8);
  14.      // 説明
  15.      $detail = mb_convert_encoding($event->content->text, SJIS, UTF-8);
  16.  }

取得できる情報は UTF-8 なので必要に応じて変換する必要があります。(iスケジュールは Shift-JIS)
日時情報はタイムゾーンなど統一されていませんが、基本的に strtotime 関数の引数に直接指定できます。
ただし、Google Calendar 上で終日の指定をしたときは”Y-m-d”形式となり、時間が含まれないフォーマットで返却されてきます。

■ quoted-printable
Zend_Gdata とは関係ありませんが、iスケジュールでは日本語を quoted-printable に変換しなければなりません。
PHP には quoted_printable_encode という関数がありますが、これは PHP5.3 以降でしか使えません。
現時点では PHP5.3 以上を使えないことも多いと思います。そのときはマニュアルを参考に自分で関数を用意します。

  1.  <?php
  2.  if (!function_exists("quoted_printable_encode")) {
  3.   function quoted_printable_encode($string) {
  4.      return preg_replace(/[^\r\n]{73}[^=\r\n]{2}/, "$0=\r\n",
  5.       str_replace("%", "=", str_replace("%0D%0A", "\r\n",
  6.       str_replace("%20"," ",rawurlencode($string)))));
  7.   }
  8.  }

今後 PHP5.3 以降にバージョンアップする可能性を考えて function_exists で判定しておけば万全です。

■ 参考
作ろうiモードコンテンツ:スケジューラデータフォーマット | サービス・機能 | NTTドコモ

[PHP]Zend Google Data Client Libraryで gCal APIs を使う[その3]|株式会社 フラッツ

Zend Framework: Documentation

まるごとPHP! Vol.2
まるごとPHP! Vol.2

Google Calendar と iスケジュールをほげってみた@SH-04A

先日こんなことを言いました。

少なくともどこかのカレンダーサービスとiスケジュールの自動同期ができないようじゃダメだ。

口ばっかりっていうのもアレですし、制限があるならその中でできる限りのことをするべきだろうってことで夜なべして作ってみました。

実機で動くようになったものの、使い勝手がいまいちだったので、公開はしてませんけど。

仕組みは簡単です。
ユーザがこのサイトにアクセスしたとき、Googleの認証セッションを持っていないときは Google のページへ飛ばします。認証されたユーザがこのサイトにアクセスすると、Google Calendar からデータを取得して iスケジュールのデータを作成します。さらに指定のメールアドレスにメールを送信し、ユーザはそのメールのリンクを踏むとスケジュールデータがダウンロードされます。

問題は以下の2点。

  • モバイルから Google アカウントにログインできない。
    これができればわざわざメールを送らなくてもその場でダウンロードできると思ったのですが、ログインできず。
  • iスケジュールをダウンロードしたとき、古いデータを更新できない。
    つまり、ダウンロードするたびに重複されたスケジュールが登録されてしまう。データフォーマットに iスケジュールそのものの ID みたいなものを持っていないよう(公開されていない)なので難しいかな。

これなら、最初からモバイル向けのスケジュールサービスを使ったほうが良いよね。iスケジュールの利点全否定ですもん。なにか方法ないかな。

まあ Google Calendar API とか Zend Framework とか quoted-printable の勉強になったってことで。

ホーム > PHP

Search
Feeds
Link
あわせて読みたいブログパーツ
Meta

Return to page top