ラベル cakephp の投稿を表示しています。 すべての投稿を表示
ラベル cakephp の投稿を表示しています。 すべての投稿を表示

2013年7月28日日曜日

PHPのフレームワークの人気を Googleトレンドで比較

世界で人気のPHPフレームワークでGoogle検索されている上位5つはこれ。

 
CodeIgniterの人気がグングン上がって、2010年頃にトップになってそのまま独走してる。ライセンス問題云々の問題は影響がなかったように見える。

また、それを追うようにYiiの人気が上昇し、PHPフレームワーク旧御三家のCake、Symfony、Zendを抜いてしまった。

それにしても2009年にみんな揃ってガクッと落ちてるのはなんだろう?


で、上位5つをの下はこれ。(比較用にZendも入れている。)

Laravelがグググッと上がってきて、Zendを抜くのは時間の問題か。CodeIgniter、Yii、Laravelが新御三家になるのかな。

有望株だったKohanaは伸び悩んでこのまま消えていくのか。意外にもEthnaは細く長く頑張ってる...?日本で人気のFulePHPは、Ethnaに辛うじて勝つ程度という低空飛行


最後に、日本限定で比べると上位5つはこれ。

みんな大好きCakePHP。安定のぶっちぎり。

後は小さくて見辛いが、Fuelがここ2年で他を抜き去って2位になって、このまま伸びそうか?Rails好きな日本人のはずが、Symfonyは落ちてきてCodeIgniterも伸び悩み。


で、ここまで書いてきてなんだけど、Googleトレンドで調べる場合の問題は、普通の単語だとPHPのフレームワークと関係なく検索数が増えてしまうこと。
例えば「Rails」で調べたら、Ruby on Railsと関係ない検索もたくさん含まれてしまうよね?Yiiなんかもどこかの国の言葉で存在してPHPと関係なく調べられてるかもしれないとも思ったけど、グラフの伸びから見るとPHPフレームワークとして検索されてそう。Yiiの強さは、普通名詞の組み合わせではない、かつ、シンプルであることだろう。

逆に、FuelPHPやZend Frameworkは「Fuel」や「Zend」と略した場合の検索がカウントされていないので、過小評価になってしまう。
「Zend Controller」「Fuel Exception」など他の言葉との組み合わせでたくさん検索されてそうだが、Googleトレンドではそこまで調べられないので。

それでも日本では圧勝のCakePHPは、それだけ凄いんだろうけど...。

2010年6月14日月曜日

システム開発で使うオンラインの日本語マニュアル



意外とマニュアル内検索が無かったり、あっても検索しづらかったりすることが少なくない。
また、普通にGoogle検索から探そうとすると古いマニュアルばかりヒットすることも(Postgresとか)。
素直に英語のマニュアルで調べればいいんだろうけど...

2009年11月28日土曜日

CakePHPの GetText (i18n)で複数形の翻訳をする

はまったのでメモ。最初からリファレンスや参考サイトを見ながらやれば書いてあったんだろうけど。


CakePHPで単数と複数で異なる翻訳を付けようとした。

__n(' person', ' people', $count);
poファイルも書いた。
msgid " person"
msgid_plural " people"
msgstr[0] "人"
msgstr[1] "人"

するとエラー(Warning)が表示された。
Warning (2): strlen() expects parameter 1 to be string, array given ...


該当箇所はCORE/cake/libs/i18n.phpのtranslate()。
if (is_array($trans)) {
if (isset($trans[$plurals])) {
$trans = $trans[$plurals];
}
}
if (strlen($trans)) {
$singular = $trans;
return $singular;
}
strlen()に配列を渡しているようだ。
でもその上で$transが配列の場合は文字列に入れ替えてるはず。(変数の使いまわしは良くないと思う。)それが効いてないのは「isset($trans[$plurals])」がfalseになっているということか。

この$pluralsをセットしているところを追うと、今回の場合は同じファイル内の__pluralGuess()によりセットしているようだ。
__pluralGuess()の中を追うと、$headerの中身で判断してるようだ。
if (strpos($header, "plurals=3")) {
if (strpos($header, "100!=11")) {
if (strpos($header, "10<=4")) {
return $n % 10 === 1 && $n % 100 !== 11 ? 0 : (略)

$headerを出力してみる。
nplurals=INTEGER;plural=EXPRESSION;

ん?さっきのif文の条件と似ても似つかない。
これは...poファイルで何か設定不足?

poファイルの最初の方を見てみる。
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
まさにこれだ。

こうしてみる。(キャッシュの削除も忘れずに。)
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

動いた!

以上。

2009年11月6日金曜日

CakePHPで用意されている layout

CakePHPでは、コントローラでlayoutを指定すれば任意のlayoutを使うことができる。
通常layoutは自分で用意するが(たいていはdefalut.ctp)、いくつか組み込みのlayoutが用意されている。
それぞれどんな出力になるか試してみた。

なお、以下のサンプルで使っているviewの中身は下記の通り。

test


1. $this->layout = 'ajax' の場合の出力結果
test
<!-- 1.7983s -->


2. $this->layout = 'flash' の場合の出力結果
(コントローラ内で$this->flash('foo', 'bar');をセット済み)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>foo</title>

<style><!--
P { text-align:center; font:bold 1.1em sans-serif }
A { color:#444; text-decoration:none }
A:HOVER { text-decoration: underline; color:#44E }
--></style>
</head>
<body>
<p><a href="/test/bar">foo</a></p>
</body>
</html><!-- 1.6536s -->
詳細はよく分からないが、何かFlashのために便利なものなのだろう、きっと。


その他にjs、xml、rssというディレクトリが用意されているがそのままでは使えない。マニュアルを参考に自分でlayoutを作るようだ。(RSSの場合はこちら(Layout :: Controller Code :: Creating an RSS feed with the RssHelper :: RSS :: Core Helpers :: The Manual :: 1.2 Collection :: The Cookbook)をコピーすればすむかも。


参考:Layouts :: Views :: Developing with CakePHP :: The Manual :: 1.2 Collection :: The Cookbook

2009年7月12日日曜日

CakePHPでユニットテスト

CakePHPでユニットテストする場合、標準ではPHPUnitではなくSimpleTestを使う。


1. ダウンロード
SimpleTestはDownloading SimpleTestからtar.gzをダウンロードできる。
(なぜかSoureceForgeの方からはtar.gzがダウンロードできなかった。どうでもいいが上記のページには"... from SourceForget.net ..."と書いてある。ソースのことなど忘れたい...とか?)


2. セットアップ
基本的にCakePHP1.2の本家のリファレンスに沿って進めればセットアップできる。


3. setUp, tearDown
SimpleTestではxUnitと同様にsetUp() tearDown()が使えて、さらにそれに加えていろいろなタイミングで呼ばれるfunctionがあるらしい。
参考:CakePHPでSimpleTest その2 TestSuiteの動きをモデルのテストケースのスケルトンで確認 | ねねとまつの小部屋

<?php
//app/tests/cases/models/member.test.phpの例
App::import('Model', 'Member');

class MemberTestCase extends CakeTestCase {

 function setUp() {
  $this->Member =& ClassRegistry::init('Member');
 }

 function testHoge() {
  $result = $this->Member->hoge('foo');
  $expected = array('baz' => 'bar');
  $this->assertIdentical($result, $expected);
 }
}


4. assert
assertEqual()は"=="で比較するので危険らしい。常にassertIdentical()を使った方が良さそうだ。


5. Caverrage
"Analyze Code Coverage"を見るにはxdebugが必要らしい。


6. Controllerのテスト
$this->testAction()が使える
<?php
class MembersControllerTest extends CakeTestCase {
 function startCase() {
  echo '<h1>テストケースを開始します</h1>';
 }
 function endCase() {
  echo '<h1>テストケースを終了します</h1>';
 }
 function startTest($method) {
  echo '<h3>メソッド「' . $method . '」を開始します</h3>';
 }
 function endTest($method) {
  echo '<hr />';
 }
 //普通に呼び出す
 function testIndex() {
  $result = $this->testAction('/');

}
 //レンダリングしたHTMLを取得する
 function testIndexGetRenderedHtml() {
  $result = $this->testAction('/', array('return' => 'render'));
  //表示して確認
  debug(htmlentities($result));
 }
 //コントローラ内でセットしたデータを取得する
 function testIndexGetViewVars() {
  $result = $this->testAction('/', array('return' => 'vars'));
  $this->assertIdentical($result['fuga'], 'honyarara');
  //表示して確認
  debug($result);
 }
}

参考:コントローラのテスト :: テスト(Testing) :: CakePHPによる作業の定石 :: マニュアル :: 1.2 Collection :: The Cookbook

2009年7月4日土曜日

PHP5.3だと CakePHPで Deprecatedエラーが出まくる問題の対処方法

PHP5.3ではE_ALLにE_DEPREATEDが含まれるので、こんなエラーが出まくる。

PHP Deprecated: Assigning the return value of new by reference is deprecated in ...

そこで、cake/libs/configure.phpの290行目あたりに下記の処理を入れればDeprecatedエラーが出なくなる。
if (isset($config['debug'])) {
 if ($_this->debug) {
  error_reporting(E_ALL);
  //この下のIF文を追加する
  if (error_reporting() > 6143) {
   error_reporting(E_ALL & ~E_DEPRECATED);
  }

ついでに、php.iniでのerror_reportingは「E_ALL | E_STRICT」にしてるけど、CakePHPではE_STRICTが出て嫌だという場合には、httpd.confまたは.htaccessにてCakeのディレクトリのみ下記のようにerror_reportingを設定すればOK。(この値はPHP5.3の場合)
php_value error_reporting 22527


この問題については#6026 (php 5.3 needs error_reporting(E_ALL & ~E_DEPRECATED);) - CakePHPでCakephp1.3に回されて、php 5.3 compatibility? - CakePHP | Google グループでは黙殺されている?


(2009/07/13 追記)
SimpleTestを使う場合、app/webroot/test.phpの28行目あたりにも下記を追加するとテスト時にDeprecatedが出なくなる。
error_reporting(E_ALL);
//この下のIF文を追加する
if (error_reporting() > 6143) {
error_reporting(E_ALL & ~E_DEPRECATED);
}
set_time_limit(0);
(追記終わり)


参考:
 PHP: 定義済み定数 - Manual (エラー定数のバージョンごとの値)

2009年2月11日水曜日

CakePHPで Cookieが有効になる PATHを指定する方法

CookieのPATHを指定すると、そのPATHに該当する場合のみCookieが有効になる。
SESSIONもCookieを使うので、SESSIONが有効になるPATHを限定または拡大できる。

例えばCookieのPATHが /foo の場合、
 Cookieが有効なURL
   http://example.com/foo
   http://example.com/foo/bar
 Cookieが無効なURL
   http://example.com/
   http://example.com/baz


CakePHPではCookieのPATHを指定したい場合、Sessionコンポーネントのpublic変数"path"にセットする。
AppControllerのbeforeFileterでやればアプリケーション全体に効く。

<?php
class AppController extends Controller {
 function beforeFilter() {
  $this->Session->path = '/foo';
 }
}

2009年1月26日月曜日

CakePHPで pagesを使う

基本
CakePHPでContorllerを使うまでもないページ(静的な表示が中心のページ)を作りたい場合、pagesを使うと便利。
(例:サイトの紹介ページ、利用規約、などなど。)
views/pagesの中にxxxx.ctpというファイル名でVIEWテンプレートを入れておけば、/pages/xxxx というURLでアクセスできる。
Controllerは作成しなくてOK。
(config/routes.phpに下記設定があるため。PagesControllerはCakeの標準機能として装備されている。)

Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
このpages内のVIEWテンプレートにもlayoutsは適用される。


タイトルタグをセットする
VIEWテンプレート内で、<?php $this->pageTitle = 'タイトル' ?> とすればタイトルタグをセットできる。


pagesからModelを呼び出す
pagesのVIEWテンプレートの中でimportする。
App::import('Model', 'Member');
後は普通のPHPクラスと同じようにnewすれば使えた。


セキュリティ上の注意
デフォルトでは /pages/home というURLで内部情報を表示してしまう。
pagesを使わない場合は、config/routes.phpのpagesへの設定を削除すればOK。
pagesを使う場合は、view/pagesにhome.ctpを作ればとりあえず害は無くなる。


参考:
 CakePHP 静的なページの作成方法 | Sun Limited Mt.
 CakePHP 公開する時はデバッグ情報を出さない | Shin x blog

2008年12月6日土曜日

mysql_conncet()で hostを localshotとする場合と127.0.0.1とする場合の違い

PHPのmysql関数の話。PDOを使えば関係ないかも。

mysql_connect()でhostにlocalhostを指定すると接続エラーになり、127.0.0.1を指定すると接続できること(環境)がある。

原因:
mysql_conncet()では、localhostの場合unixソケットを使い、127.0.0.1の場合はTCP/IP接続を使うため、らしい。
(Windowsの場合は実行ファイルの呼び出し???)
参考:codeなにがし::mysql_connect()のホスト名にlocalhostを指定するとソケット接続になる


こちらも参考:MAMP環境CakePHP1.2のbakeでSQL接続エラー - ElectronicBrain is eating BreakFast

2008年11月8日土曜日

CakePHP 1.2のFormHelperのradio()で余分なhiddenを出力しない方法

CakePHP1.2のFormHelperでラジオボタンを出力すると、ラジオボタンの前に隠し項目が出力されることがある。


<input type="hidden" name="data[Foo][bar]" id="FooBar_" value="" />
<input type="radio" name="data[Foo][bar]" id="FooBarBaz" value="Baz" />
<label for="FooBarBaz">Baz</label>

このhiddenを出力させたくない場合、$form->radio()の第3引数の配列で、'value'に何か値をセットして渡す。
echo $form->radio('Foo.bar', array('Baz' => 'Baz'), array('value' => 'none'));
そうすると、
<input type="radio" name="data[Foo][bar]" id="FooBarBaz" value="Baz" />
<label for="FooBarBaz">Baz</label>

ラジオボタンの値に一致するvalueを渡すとそれが初期選択状態になるので、選択状態にしたくない場合は上記の例のように一致しない適当なvalueを渡す。


参考:API for CakePHP : The PHP Rapid Development Framework :: version 1.2.x.x

CakePHPの標準機能でパンくずリスト(トピックパス)を生成する方法

CakePHPでパンくずリストを表示するサンプル YARETOKO「ヤレトコ」メインブログ


標準で使えるのが便利。
$html->addCrumb()の第2引数(URL)を省略すると、リンクでないただのテキストとして表示されるようだ。
なのでelementにするならURLを省略できるようにすると便利。

<?php
foreach ($crumbs as $crumb) {
 $crumb = am(array('url' => null, 'options' => null), $crumb);
 $html->addCrumb($crumb['title'], $crumb['url'], $crumb['options']);
}

echo '<div class="crumbs">';
echo $html->getCrumbs(' > ', 'トップ');
echo "</div>\n";


参考:API for CakePHP : The PHP Rapid Development Framework :: version 1.2.x.x

2008年10月3日金曜日

CakePHP初心者のための Tips (CakePHP 1.2)






自分用のメモ。



本家のマニュアル:The Cookbook :: 1.2 Collection :: マニュアル







URLでパラメータを受取る






AppControllerの記述例


<?php

class AppController extends Controller {

public $components = array('foo');

}




  • AppControllerは、CAKE_HOME/app/app_controller.php に置く。







DBを使わない場合の設定







Controllerでのset()を一度で済ます






ControllerからViewにデータを渡す方法




Pagesコントローラについて




レイアウト用のファイル






エレメント






FormHelperの使い方






特定のページでしか使わないCSSやJavaScript



  • layoutでこれらを出力する場所に「echo $scripts_for_layout;」する。


  • HTML部分を書いた後でもCSS等を指定できるのは便利。


  • CSSとJavaScriptを別の場所に出力はできなそう。


    //link to webroot/css/foo.css

    $this->addScript($html->css('foo'));

    //include webroot/js/bar.js

    $this->addScript($javascript->link('bar'));

    //write Code Block of JavaScript

    $this->addScript($javascript->codeBlock("alert('Hello! CakePHP.');"));







翻訳(GetTextの使い方)


2008年9月20日土曜日

CakePHP 1.2で WebService APIを利用する

Webで公開されているAPIからデータを取得したりデータを送信するBehaviorがBakeryで公開されている。

Webservice Behavior (Articles) | The Bakery, Everything CakePHP

HTTP GET、HTTP POST、XMLRPCが使えるようだ。


GETしたいだけならオーバースペックかも。
POSTもcURLを使わずに、PHPでPOSTリクエストを送信する - PHPプロ!ニュースの方がシンプルでいいかも?


参考:CakePHP1.2のBehaviorを使う - 院生エンジニアのにっき

2008年9月16日火曜日

CakePHP 1.2 のFormHelperで日付選択リストを作る

$form->datetime()を使うと、年月日(または年月日+時間)を選ぶselect要素が簡単に作れる。

echo $form->datetime('cal', 'MDY', 'NONE'); // => Septemper-1-2008

//第3引数をNONE以外すると、時間の選択リストも表示される。(デフォルトは"12")
echo $form->datetime('cal', 'MDY', 24);


オプションとしてarray('monthNames' => false)を渡すと、月の表示が数字になる
echo $form->datetime('cal', 'YMD', 'NONE', null, array('monthNames' => false)); // => 2008-01-1

「日」がゼロ埋めなしなのに「月」だけゼロ埋めされているのが嫌な場合は、あらかじめ$form->month or $form->dayにデータをセットしておく。(参考:CakePHP FormHelper#datetime()で年月日表示を変える | Shin x blog
array_combineを使ったのはoption要素のvalue属性を表示値と同じにするため。
$form->options['month'] = array_combine(range(1, 12), range(1, 12));
echo $form->datetime('cal', 'YMD', 'NONE'); // => 2008-1-1

デフォルトでは年が現在から前後20年ずつ、大きい順に表示されて煩わしい。
今年と来年を小さい順に表示するにはこんな感じ。
$years = range(date('Y'), date('Y') + 1);
$form->options['year'] = array_combine($years, $years);
echo $form->datetime('cal', 'YMD', 'NONE');



2008年9月15日月曜日

CakePHP 1.2 で多国語対応(GetText)調査メモ

PHPでは _() または gettext() でgettextできるが、CakePHPではそれをラップして __() でgettextできる。

//PHPの例
echo _('We love PHP');
//CakePHPの例
__('You love CakePHP'); //第2引数でtrueを指定すればechoせずに戻り値を返すこともできる
CakePHPではCakeコンソールからi18nできて便利そう。
CakePHPでのgettextについては、CakePHP 1.2 の多言語対応メモ - miau's blog?が、参考サイトへのリンクも多く、よくまとまっていて参考になる。


あとはひっかかりそうなところについてのメモ。


複数形
英語など単数と複数でメッセージが変わる場合、__n() を使う。
//例
__n('cat', 'cats', $catCount);
echo __n('mouse', 'mice', $mouseCount, true); //第4引数は戻り値を返すかどうか
詳しくは、1.2系の多言語対応メモ(2) - Writing Some Codeを参照。
Rubyよりも使いやすいと思う。

(2008/09/17 追記)
__n()の第3引数は、シンプルな変数でないと機能しないようだ。sprintfとかの関係だろうか?
//NG

__n('cat', 'cats', $cat['count']);


//OK
$count = $cat['count'];
__n('cat', 'cats', $count);
(追記終わり)


言語によってメッセージ内のパラメータの順番が違う場合
翻訳メッセージの複数個所に穴埋めで項目名などを入れる場合で、言語によって順番が違う場合の対応方法。
1.2系の多言語対応メモ(3) - Writing Some Codeの後半を参照。

2008年9月6日土曜日

CakePHP1.2の layoutで使える Helperのまとめ

head要素内に記述する要素など、layoutに書く要素のうちHelperで作成できるもののまとめ。



  • ドキュメント宣言 (参考:HtmlHelper::docType
    //引数なしの場合はXHTML1.0 Strict
    echo $html->docType();
  • Content-Typeのmetaタグ (参考:HtmlHelper::charset)※2008/09/13 誤り修正
    //デフォルトはPHPのdefault_charset???
    echo $html->charset();
  • CSS (参考:HtmlHelper::css
    複数ある場合は配列で渡せる。
    //webroot/css/foo.cssを読み込む場合
    echo $html->css('foo');

    //webroot/css/foo.cssとwebroot/css/bar.cssの2つを読み込む場合

    echo $html->css(array('foo', 'bar'));
  • JavaScript (参考:JavascriptHelper::link
    これも配列で渡せる。
    //webroot/js/foo.jsを読み込む場合


    echo $javascript->link('foo');



    //webroot/js/foo.jsとwebroot/js/bar.jsの2つを読み込む場合


    echo $javascript->link(array('foo', 'bar'));


    JavascriptHelperを使う場合、ControllerでこのHelperを有効にしておく。(「s」が小文字なので注意!)
    var $helpers = array('Html', 'Javascript');
  • その他、$html->meta('xxx')で作成できるもの (参考:HtmlHelper::meta
    • RSS ('rss')

    • Atomフィード ('atom')
    • favicon ('icon')
      • デフォルトはwebroot/favicon.ico
    • metaタグのkeyword('keyword')
    • metaタグのdescription ('description')


YUI Girdsを使うならこんな感じになる。
<<?php ?>?xml version="1.0" encoding="<?php echo ini_get('default_charset'); ?>" ?>
<?php echo $html->docType(); ?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<?php echo $html->charset(); ?>
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<title><?php echo $title_for_layout; ?></title>
<?php
echo $html->meta('icon', '/favicon.ico'); //サイト全体で共通のfaviconを使う場合
echo $html->css(array('foo', 'bar'));
echo $javascript->link(array('foo', 'bar'));
echo $scripts_for_layout;
?>
</head>

<body>
<div id="doc2" class="yui-t7">

<div id="hd">
ここにヘッダーを書く
</div><!-- #hd -->

<div id="bd"><div class="yui-g"><?php echo $content_for_layout; ?></div></div>

<div id="ft">
ここにフッターを書く
</div><!-- #ft -->

</div><!-- #doc/[2-4]?/ -->

</body>
</html>

少しくらいCSSやJavaScriptを書くだけなら、わざわざHelperを使わずに直接書いた方がいいかも。
JavaScriptは</body>の直前に書きたいが、これでは無理か...?



CakePHPで特殊な用途に使われるテーブルのフィールド名



CakePHP 1.2で bakeするメモ

CakePHP1.2では、bakeはこんな感じで実行できる。

cake bake

cakeコマンドはCAKE_HOME/cake/consoleディレクトリにあるが、bakeはアプリケーションを作りたいディレクトリ上で実行する必要がある。WindowsではCakePHP のおいしい食べ方: [1.2]Easy Bake on Windowsを参考にすると楽。オプションとしてappのパスを指定できた。
cake -app /path/to/app bake


bakeでのModelの作成はDBのテーブルを元にするので、DBにテーブルが1つも無いと怒られる。
テーブルを作ってからbakeすること。
Welcome to CakePHP v1.2.0.7296 RC2 Console
---------------------------------------------------------------
App : app
Path: CAKE_HOME/app
---------------------------------------------------------------
Interactive Bake Shell
---------------------------------------------------------------
[D]atabase Configuration
[M]odel
[V]iew
[C]ontroller
[P]roject
[Q]uit
What would you like to Bake? (D/M/V/C/P/Q)
> M
---------------------------------------------------------------
Bake Model
Path: CAKE_HOME/app/models/
---------------------------------------------------------------
Error: Your database does not have any tables.

bakeでModelを作るとオプションでvalidationも付けられる。
が、maxLengthなど値を指定するルールをbakeでどうやって指定するかわからない。

CakePHP1.2インストールメモ

CakePHPアプリケーションへのアクセスを http://example.com/cake とする場合のインストール手順のメモ。
(参考:The Cookbook :: 1.2 Collection :: マニュアル :: CakePHPによる開発

  1. ダウンロード
    • CakePHPのサイトからアーカイブをダウンロード
    • アーカイブを適当な場所(以下CAKE_HOMEと呼ぶ)に解凍
  2. Apacheの設定
    • 今回のようにアプリケーションのルートURLをサブディレクトリにする場合、そのままでは404 Bad Requestになってしまうので注意。
      CAKE_HOME/app/webrootにある.htaccessにRewriteBaseを追加すればOK。(参考:siwa32.com » CakePHPをはじめる6 サブディレクトリ運用まとめ
      <IfModule mod_rewrite.c>
       RewriteEngine On
       RewriteBase /cake
       RewriteCond %{REQUEST_FILENAME} !-d
       RewriteCond %{REQUEST_FILENAME} !-f
       RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
      </IfModule>
  3. 動作確認
    • http://example.com/cake/ にアクセスして、CakePHPが動作することを確認
  4. DB接続の設定(参考:The Cookbook :: 1.2 Collection :: マニュアル :: CakePHPによる開発 :: 環境設定 :: データベースの設定
    (※これはbakeを使っても設定できる)
    • CAKE_PHP/app/configにあるdatabase.php.defaultをコピーしてdatabase.phpというファイルを作る
    • database.phpを編集
      var $default = array(
       'driver' => 'mysql',
       'persistent' => false,
       'host' => 'localhost',
       'login' => 'USER_NAME', //DBユーザー名
       'password' => 'PASSWORD', //DBのパスワード
       'database' => 'cake', //DB名
       'encoding' => 'utf8', //MySQLで日本語を扱うため
      );
    • 編集してから http://example.com/cake/ にアクセスすると、DB関連のメッセージのメッセージがGREENになる

ブログ アーカイブ

tags