Home > Tags > CakePHP

CakePHP

cakephp1.2でPEAR::Services_Amazonを使う

上記3サイトを参考に実装する。

  1. vendors/pear.inc.phpを作成
  2. <?php
    define('PEAR_PATH', dirname(__FILE__) . DS . 'PEAR');
    set_include_path(PEAR_PATH . PATH_SEPARATOR . get_include_path());
    ?>

  3. PEAR::Services_Amazonと依存関係にあるパッケージをvendorsディレクトリ以下に配置
  4. 必要なパッケージを以下のように配置

    vendors/PEAR/Cache
    vendors/PEAR/Cache.php
    vendors/PEAR/HTTP
    vendors/PEAR/Net
    vendors/PEAR/PEAR
    vendors/PEAR/PEAR.php
    vendors/PEAR/Services/Amazon.php
    vendors/PEAR/Services/AmazonECS4.php
    vendors/PEAR/XML

    ※もしかした不要なものも含まれてるかも。。

  5. Services_Amazonの呼び出し
  6. キーワード「Web」で1ページ目の情報を取得

    // Amazon API
           vendor('pear.inc');
           require_once('Services/AmazonECS4.php');
           $option = array('subscription_id' => 'xxx',
                           'associate_id' => 'xxx',
                           'locale' => 'JP');
           $amazon = new Services_AmazonECS4($option['subscription_id'], $option['associate_id']);
           $amazon->setLocale($option['locale']);
           $list = $amazon->ItemSearch('Books', array('Keywords' => 'Web',
                                                      'ResponseGroup' => 'ItemIds,ItemAttributes,Images',
                                                      'ItemPage' => '1'));
           debug($list);

これで10商品分取得できる。

cakephp1.2でcacheを使う

cakephp1.1の時と同じように(ちょっと違うけど)キャッシュの設定をする。

  1. core.phpの設定
  2. Cache.checkのコメントを削除

    Configure::write('Cache.check', true);
  3. controllerの設定
  4. プロパティに追加(※Cacheヘルパーを指定しないと動かない)

    var $helpers = array('Html', 'Cache');

    アクションに追加(※trueだと動かない)

    $this->cacheAction = '+12 hours';

これでキャッシュが有効になる。

続きを読む

今からCakePHPを使ってWebアプリを作成する-2

mysqlの設定

mysql -u root -p
mysql> grant all privileges on cake.* to cake@localhost identified by ‘PWD’;
mysql> create database cake;
mysql> exit;

あとはdatabase.phpを設定する。
その次にamazonのAPI関数を作成する。

Premature end of script headers: php5.cgi

CakePHPをセットアップしてindex.phpにアクセスすると500 Internal Server Error。
エラーログは以下。

Premature end of script headers: php5.cgi

今のところ手がかりなし

仕方がないので以下のようにphp4で動作するように.htaccessを無理矢理修正

-    RewriteRule ^(.*)$ index.php4?url=$1 [QSA,L]
+    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

今からCakePHPを使ってWebアプリを作成する-1

TODO

  1. 本番にCakePHP設定
  2. 雛形HTML作成
  3. 画像を取得するAPI利用モジュール作成

正直そんなにたいしたものは作らないけど、CakePHPを使ってWebアプリを作る。APIを使って画像を取得しそれを一覧で並べるだけというアプリを想定。入力窓があってそこに入力すると画面に変化があって、できればアフィリエイトもいれて。まずはそこまで、その次はjsを使ってみる。その次はPHP Extensionを使ってみる。

URLはここ

CakePHP 1.2 系を試してみる

CakePHPからPre-Beta: 1.2.0.5875 pre-betaをダウンロードする。

クライアントのcoLinux上に展開。

CakePHPが動作するようApacheのhttpd-vhosts.confを以下のように修正する。

<virtualhost>
ServerAdmin webmaster@c.xxx.co.jp
DocumentRoot /mnt/svn/sylvan-l/c/app/webroot/
ServerName c.xxx.co.jp
ErrorLog logs/c.xxx.co.jp-error_log
CustomLog logs/c.xxx.co.jp-access_log common</virtualhost>

<directory>
Options Indexes FollowSymLinks
AllowOverride AuthConfig Limit FileInfo
Order allow,deny
Allow from all
</directory>
</virtualhost>

mod_rewriteがあった方がいいので、以下の記述をhttpd.confに追加しapacheを再起動する。

LoadModule rewrite_module modules/mod_rewrite.so

CakePHPの勉強会へのリンク

CakePHP勉強会を開催しました! & 発表資料です : akiyan.com

今後も利用していきたいと思っているフレームワークCakePHP。

一度業務で利用したけれどまだまだ理解できていない部分があり、発表資料を読んでもっと使い込まないとと感じました。

CakePHP勉強会を開催しました | Shin x blog

また普段からブログを読んでいる Shin x blogさんが大阪と聞いてびっくりしました。会社でどんな風に利用しているのか知りたいなぁとつい思いました。

CakePHPガイドブック

初めてのRuby
初めてのRuby
posted with amazlet at 08.07.29
Yugui
オライリージャパン
売り上げランキング: 1780
おすすめ度の平均: 5.0

5 要点がコンパクトにまとまっています。(中級者以上向け)

query 関数で同じ sql を実行するとキャッシュが効いてしまう

例えば、

$data = $this-&gt;query('select * from sample');// ここで sample テーブルに対してレコード追加を行う$data = $this-&gt;query('select * from sample');

上記のような処理をすると、1 度目の query 文で取得したデータと 2 度目の query 文で取得したデータは異なるはずだが、CakePHP の仕様ではキャッシュがデフォルトでオンになっているためレコード追加後のデータは取得できない。

仕方がないので、cake/libs/model/datasources/dbo_source.php を修正する。

修正前
function query() {
$args = func_get_args();
$fields = null;
$order = null;
$limit = null;
$page = null;
$recursive = null;

if (count($args) == 1) {
return $this->fetchAll($args[0]);
修正後
function query() {
$args = func_get_args();
$fields = null;
$order = null;
$limit = null;
$page = null;
$recursive = null;

if (count($args) == 1) {
return $this->fetchAll($args[0], false);

追記
この前気づいたけどこの修正は間違い。query() 関数の何個目かの引数に false を渡せばキャッシュされないようになります。

CakePHP で GROUP BY を使う

以下のようにするだけで GROUP BY が使えます。

$conditions = "GROUP BY ID";$this->modelName->findAll($conditions);

対応が必要なモデルの validates

CakePHP モデルのvalidates()に注意 | Shin x blog には対応する必要がありそう。

このままだと空っぽのデータをバリデーションにかけると OK になる。

ホーム > タグ > CakePHP

ぴくちゃー
ブログパーツ

ページの上部に戻る