5丁目通信(仮称)

とある5丁目で活動する還暦を過ぎたWebプログラマーの覚え書きです。それとかかってくる迷惑電話や、家業のアパート経営について。

タグ: CakePHP

  • baserCMS のテーマ配置場所がドキュメントルートの下だった話し

    CakePHPでサイトを作成していると、静的ページの編集追加も自分で作らないといけないし、お客さんでも編集可能にしたり、その他諸々便利そうだからということbaserCMSをプラットフォームにしてみたらどうなるかとインストールしてみた。

    しかしながらbaserCMSのテーマ配置場所がドキュメントルートの下にあるということはちょっと驚いた。ビューの下ではないのね。CakePHPのテーマの機能は使っていないのかな。

    もしかしたら、.htaccessにゴチョゴチョ設定されているから直接ファイルにアクセスできないようにしているとか思ったらそうではなかった。もしかしたらブログでアップロードされたファイルもwebrootのfilesの下に入ってしまうのかな。

    何かbaserCMSのドキュメントに書かれていないようなテーマの配置場所を変更する設定方法があるのだろうか?

    著:山田祥寛
    ¥3,366 (2025/03/27 13:40時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/03/27 13:40時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/03/30 15:22時点 | Amazon調べ)
  • CakePHPのDebugKitの表示がページの下に表示されるときの対応の話し

    CakePHPのDebugKitプラグインですが、正常に動いていると右上にアイコンが表示されます。

    CakePHPのバージョンが2.4.7で現時点の最新版のときにインストールすると、Debug Kitプラグインで表示される内容がページに下に丸見えになってしまいました。

    Debug Kitプラグインのインストールも正しく行っていると思っていましたが、プラグインから書き出しているwebroot以下のdebug_kitディレクトリに設置されているJavaScriptファイル、CSSファイル、画像ファイルが、すべて404 File not foundになっていました。

    調べてみるとDebug KitプラグインのGitHubでも同じことで悩んでいる人がいました。結果として、/app/COnfig/bootstrap.php に以下のコードを付け足せば、正しくDebug Kitプラグインの結果が表示されます。

    Configure::write('Dispatcher.filters', array(
    'AssetDispatcher',
    'CacheDispatcher'
    ));
    

    Dispatcher.filtersがどういう役割をしているかよくわかりませんが、CakePHPのドキュメントのプラグインアセットのページと、SildeShareのこのページが参考になるかもしれません。

    ただし、Vagrantの共有フォルダで開発しているため、シンボリックリンクでの設定はできませんでした。

    著:山田祥寛
    ¥3,366 (2025/03/27 13:40時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/03/27 13:40時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/03/30 15:22時点 | Amazon調べ)
  • baserCMS を使い始めたけど、スマートURLでつまずいた話し

    次回の案件で、baserCMSをプラットホームに使いたくインストールしました。サーバーも簡単に手に入れるため、Vagrantでサーバーを立てました。

    baserCMSのインストール自体は簡単ですが、システム設定でスマートURLをオンにすると、アクセスできなくなりました。Vagrantだからサーバー関係のインストールは、何もしなくても大丈夫だろう思ったのが落とし穴でした。

    スマートURLというのは、CakePHPでのindex.phpを隠して、/コントローラ名/アクション名/できれいなURLでアクセスできるURLリライティングの機能だと思います。CakePHPのURLリライティングは、Apacheだったらmod_rerwiteと、.htaccessが許可されていることが必要です。CakePHPのドキュメントが参考になります。nginxでの説明もあります。

    結果としては、今回のVagrantで起動されたサーバーは、.htaccessは許可されていませんでした。そこで、/etc/httpd/conf/httpd.confを書き換えます。<Directory “/vagrant”>を探して、その中の

    AllowOverride None

    AllowOverride All

    にします。Apacheを再起動して完了です。これでうまくアクセスできるようになります。これで、次のステップに進みます。

    baserCMSで最初に AllowOverride None にしているのは、何か意図していることがあるのでしょうね。

    著:久保田涼子, 著:西原礼奈, 著:阿諏訪聡美
    ¥2,399 (2025/03/28 17:08時点 | Amazon調べ)

    なんやかんやでWordPressのサイト構築で躓くのは、PHPのプログラミングなのでした。

  • OSC Tokyoに参加した。#osc2014tk

    1年ぶりにオープンソースカンファレンス東京に参加しました。

    たまに外でいろいろな話しを聞くことは刺激になります。

    今回の収穫。

    • RaspberryPiの本をじゃんけん大会で貰った。これはRaspberryPiを買えということか。
    • nginxに映像のストリーミングのモジュールがあるらしい。見てみよう。
    • baserCMSがCakePHPの2に対応したそうだ。試してみよう。
    • Yeomanが面白そう。試してみよう。
    • MongoDBは楽しそうだな。今度の案件で提案してみよう。
    • 懇親会でLibreOfficeユーザー会の人に話しかけたら逃げられた。流行らす気はないのかな?
    • マイクロソフトのクラウディアさんと名刺交換してお話しした。娘に自慢しよう。

    それにしてもOSCの会場の明星大学は遠いな。南武線を乗ると寂しい気分になります。教室はきれいで広いのは素晴らしいけど。

    WiMAXが繋がらないのは困りもの。WiMAXが繋がらないのは毎年書いているな。もう別のものにしてやめようかな。

  • #CakePHP でFixtureをbakeしたとき、enumフィールドでエラーが出たので対応した話し

    CakePHPでbakeでFixtureを作成したとき、モデルにenumのデータタイプがあると

    Notice Error: Schema generation error: invalid column type enum('xxx','yyy','zzz') for Model2.field does not exist in DBO in [C:\xxxxxx\lib\Cake\Model\CakeSchema.php, line 610]

    のようにエラーが出て正常にFixtureが生成できなくなります。

    対応としては、FixtureをBakeするときにレコードを作成させてしまいます。

    Possible Models based on your current database:
    1. Model1
    2. Model2
    3. Model3
    4. Model4
    5. Model5
    
    Enter a number from the list above,
    type in the name of another model, or 'q' to exit
    [q] > 2
    Would you like to import schema for this fixture? (y/n)
    [n] >
    Would you like to use record importing for this fixture? (y/n)
    [n] >
    Would you like to build this fixture with data from KeywordGroup's table? (y/n)
    [n] > y

    ここにエラーがたくさん表示される。

    Please provide a SQL fragment to use as conditions
    Example: WHERE 1=1
    [WHERE 1=1] >
    How many records do you want to import?
    [10] >

    できあがったFixtureにはenumのフィールドに関しての$fieldsが抜けているので、Stringとして追加してしまいます。

    public $fields = array(
    :
    :
    'field' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 50, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
    :
    );

    $recordsには、本番DBから適当にデータが追加されているはずです。この$recordsのデータがテストデータとしてinsertされます。

    適当ですが、これでテストできました。

    著:山田祥寛
    ¥3,366 (2025/03/27 13:40時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/03/27 13:40時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/03/30 15:22時点 | Amazon調べ)
  • CakePHPを2.2にバージョンアップしたら英語で表示してしまうことを対応した話し

    CakePHPを1.3から2.2にバージョンアップしたら、日本語が英語で表示されるようになってしまいました。

    ローカルのPCでは、正常に日本語で表示されます。どういう訳か、国際化する前の__(‘xxx’)のxxxが表示されてしまいます。

    /app/Config/core.phpに

    Configure::write('Config.language', 'ja');

    を追加しても変わりません。いろいろ調べるうちにわかりました。

    /app/locale

    になっていました。

    /app/Locale

    が正解です。CakePHPが2になって、ディレクトリの1文字目が大文字になっているのを忘れていました。PCですと、この辺りは無視されますので、Unix系のサーバーに配置したときに初めてわかります。

    著:山田祥寛
    ¥3,366 (2025/03/27 13:40時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/03/27 13:40時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/03/30 15:22時点 | Amazon調べ)
  • CakaPHPのHTMLヘルパーからの出力が汚いと言われたので無理矢理修正した話し

    お客さんからCakePHPから出力するHTMLコードが汚いと言われました。特に<head>の中の<meta>がつながって読みにくいと言われてしまいました。別に人間が読まないからいいじゃないと思いますが、ここはお金をいただく身ですので、こころよく修正してしまいます。

    HTMLヘルパーは出力するときにHtmlHelper.phpでsprintf()で整形して追加しているだけのようですので、とりあえず簡単にsprintf()の書式に\nを追加してしまいます。

    CakePHP自身を修正したくないので、MyHtmlヘルパーを作ってHtmlヘルパーから継承させてしまいます。

    <?php
    App::uses(‘HtmlHelper’, ‘View/Helper’);
    class MyHtmlHelper extends HtmlHelper {
    public function __construct(View $View, $settings = array()) {
      parent::__construct($View, $settings);
      // HTMLヘルパーで整形して出力するコードの行末に改行を入れて、きれいなHTMLコードを出力する。
      foreach($this->_tags as $key => $value) {
        $this->_tags[$key] = $value . “\n”;
        }
      }
    }

    使うときには、コントローラーのヘルパーの設定で、

    public $helpers = array( ‘Html’ => array(
       'className' => ‘MyHtml’
      )
    );

    のようにしておきます。これでHTMLヘルパーを使っているViewを修正せずに、MyHtmlヘルパーを使えます。今回はメソッドの追加変更はありませんので、そのままHTMLヘルパーを使えます。

    あまり役に立たないコードです・・・。

    著:山田祥寛
    ¥3,366 (2025/03/27 13:40時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/03/27 13:40時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/03/30 15:22時点 | Amazon調べ)
  • #CakePHP でOGPの対応をした話し

    今、サポートしているゲームのブログランキングのサービスで、OGPへの対応の要望がありました。

    Htmlヘルパーを地道にビューに設定すればいいのですが、何かよい方法がないかと調べてみました。

    やはりありました。既にCakePHPのプラグインを作成してくれていました。しかもCakePHP2に対応されています。

    Ogphttps://github.com/monsat/Ogp

    オリジナルのままだと、作っているサービスには機能不足なので、機能を追加します

    • og:url に自動的に自分のURLを挿入する。
    • プリフィックスがog:以外に、Facebookのためのfb:を設定できるようにする。

    いろいろとソースを修正できるのも、オープンソースのいいところ。

    Githubにリポジトリを公開されていたので、Pull Requestして追加したソースの差分を取り込んでもらいました。

    著:山田祥寛
    ¥3,366 (2025/03/27 13:40時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/03/27 13:40時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/03/30 15:22時点 | Amazon調べ)
  • #baserCMS はPHPのバージョンによっては動かないので注意という話し

    OSC2012で紹介されていたbaserCMSをインストールしてみました。

    まずはローカルのPCにインストール。インストール自体は簡単ですが、残念ながら管理者ダッシュボードの中で固まります。

    PCではXAMPPの上でbaserCMSを動かしているのですが、もしやと思って古いバージョンのXAMPPで動かしてみると、今度は問題なく動きます。baserCMSはCakePHPの上で動いています。一緒にインストールされるCakePHPのバージョンを見たら1.2でした。これは古い・・・。

    baserCMSのサイトでシステム要件を見たら、PHP5.2.17以降となっていますが、経験上CakePHPの1.2ではPHP5.3以降は、エラーが出て面倒なことになりそうです。

    今使っているXAMPPのバージョンは、1.7.7で一つ古いのですが、動いているPHPが5.3.8なので、それが問題かもしれません。最新版のXAMPP1.8.0はPHP5.4.4なので、そこまで新しいと本番サーバーが間に合わないので使っていません。baserCMSが動くXAMPPのバージョンは1.6.8でPHPは5.2.6でした。PHPが5.2系なら大丈夫なのでしょう。本番サーバーでよく使うRedhat系のCentOSも6だと、PHPは5.3系がインストールされるので、このままだとbaserCMSは本番サーバーにインストールしたときに問題になるでしょう。

    以上、出鼻をくじかれたので、今日はbaserCMSはインストールしただけで終わってしまいました。baserCMSが新しいCakePHPに対応するまで待ったほうがいいかもしれません。それとも今まで通りWordPressでサイトを作ったほうがいいかもしれません。

    著:山田祥寛
    ¥3,366 (2025/03/27 13:40時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/03/27 13:40時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/03/30 15:22時点 | Amazon調べ)
  • #CakePHP でMissingModelExceptionがログに出力された話し

    ローカル環境からUnix系のサーバーのテスト環境に、CakePHPで開発したサービスを移行する。動かない。

    PHPUnitでテストケースを動かすと内部エラーになる。ログを見るとMissingModelExceptionが出力されていた。

    何のことはないモデルのファイル名が違っていた。Postモデルは、Post.phpを見に行くということ。これをpost.phpにしていた。Windowsではファイル名の大文字小文字は関係ないが、Unix系のLinuxでは気にしましょうということ。

    以上、絶対に同じ間違いをしそうなので、覚え書きとして残しておく。

    著:山田祥寛
    ¥3,366 (2025/03/27 13:40時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/03/27 13:40時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/03/30 15:22時点 | Amazon調べ)