PHPふれーむわーくのしょりのながれをおう
どうその としろう [ちょ] 2006/12/18 00:00

← 1 2 3 →

1.htaccess(mod_rewrite)のぎほう

 CakePHPでは、

http://cakeのぱす/こんとろーら/めそっど/ぱらめーた

 というURLでじっこうすると、いかの「もでる」「こんとろーら」「びゅー」くらすがじどうてきによみこまれ、せきゅりてぃにひつようなしょりがおこなわれます。またでーたべーすへのあくせすやびじねすろじっくのじっこう、てんぷれーとをしようしたひょうじなどのさぎょうがじどうてきにおこなわれていきます。

りくえすとでよみこまれるくらす
くらすせつめい
もでるでーたべーすてーぶるへのあくせすくらす
こんとろーらURLでしていされたこんとろーら(めそっどのないようがきじゅつされている)くらす
びゅーこんとろーらでしょりされたでーたをうめこむ、てんぷれーとHTMLふぁいる

 たとえば

http://cake/samples/view/3

 というURLのばあい(ひょうじゅんてきなどうさ)、いかのとおりとなります。このしょりはどのようなながれでじつげんされているのでしょうか。

http://cake/samples/view/3でよみこまれるくらす
くらすふぁいるよみこまれるくらすめい、せつめい
もでるsample.phpSampleくらす(DBのsamplesてーぶるとそのかんれんてーぶるにあくせす)。
こんとろーらsamples_controller.phpSamplesControllerくらす(そのなかのview($id)めそっどがじっこうされる。$idは3になる)。
びゅーview/samples/view.thtmlでーたはたんなるHTML。こんとろーらからのでーたをこのてんぷれーとによみこんでひょうじ。

htaccess(mod_rewrite)のきそちしき

 Apacheの「mod_rewrite」とは、「ようきゅうされたURLをりあるたいむでかきかえるための、るーるべーすのかきかええんじん」で、「URLをそうさするためのすいすせいのあーみーないふ」ともまにゅあるにかかれています。つまり、PHPがしょりするまえにURLをひつようにおうじてじゅうなんにかきかえることができる、あーみーないふのようにべんりなもじゅーるです。しじするないようは「httpd.conf」にかくことができますが、「.htaccess」というふぁいるでせっていすることもできるようになっています。CakePHPのなかには、

  1. 「CakePHP」でぃれくとりをてんかいしたちょくかに「.htaccess」がひとつ
  2. 「app」でぃれくとりに「.htaccess」
  3. 「app/webroot」でぃれくとりに「.htaccess」

 という3かところにそんざいしています。なお、たんにかいとうしてそのままはいちしただけなのに、「もじはひょうじされたけどがぞうがでない」とか、「index.php?url=というかたちではあくせすできるけど、/こんとろーら/めそっど、というかたちではうまくひょうじされない」などのとらぶるがおきるばあい、そのたいはんは、Apacheの「mod_rewrite」がただしくうごいていないことがげんいんです。phpinfo()などで、「mod_rewrite」もじゅーるがただしくよみこまれていることをかくにんしてください。

せっていこうもくのひんと(CakePHPにかんけいするおぷしょん)
おぷしょんせつめいびこう
RewriteEngine OnURLかきかええんじんをONにする。
RewriteCondしていしたじょうけんにあてはまるばあいに、じぎょうのRewriteRuleをじっこうする。-f していされたぱす、ふぁいるがそんざいしていればtrue。%{REQUEST_FILENAME}りくえすとされたふぁいるめい。
RewriteBaseCakePHPにはしていがありませんが、さーばのでぃれくとりがAliasなどをしようしてせっていされているばあい、ぶつりてきなふぁいるめいのぱすのしていをこれでついかしてください。
RewriteRuleせいきひょうげんでかきかえるーるをせっていします。[L](last) していじょうけんにまっちすると、そののちにつづくRewriteRuleはひょうかされません。[QSA](query string append) せいきひょうげんでちかんもじれつをおきかえるのではなく、くえりーもじれつぶぶんをついかします。
せいきひょうげんにかんするひんと
きごうせつめい
^ぎょうとう
$ぎょうまつ
.にんいの1もじ
[abcd]かっこないのもじ(a,b,c,d)ががいとう
[^abcd]かっこないのもじいがい(a,b,c,dいがい)ががいとう
A|BAかB
+ちょくぜんのもじの1かいいじょうのくりかえし
?ちょくぜんのもじの0かいまたは1かいのくりかえし
*ちょくぜんのもじの0かいいじょうのくりかえし
$1ぱたーんの()でかこまれたさいしょのぶぶんを$1でさんしょうできます

 それでは、CakePHPの「.htaccess」ふぁいるをみてみましょう。

  1. 「CakePHP」をてんかいしたちょくかにある「.htaccess:」
  2. <IfModule mod_rewrite.c>
       RewriteEngine on
       RewriteRule    ^$ app/webroot/    [L]
       RewriteRule    (.*) app/webroot/$1 [L]
    </IfModule>
    
  3. 「app」ふぉるだにある「.htaccess:」
  4. <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteRule    ^$    webroot/    [L]
        RewriteRule    (.*) webroot/$1    [L]
    </IfModule>
    
  5. 「app/webroot」ふぉるだにある「.htaccess:」
  6. <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
    </IfModule>
    

 じょうきの3つをかいせつするといかのとおりになります。

1.Cakeのおやでぃれくとりへのあくせす
  • RewriteEngineをONにする。
  • こんとろーらのしていのないURL(つまり、http://cakeのぱすでよばれたばあい)には、「app/webroot/」とする(しょりしゅうりょう)。
  • なにかしていされていれば、それをすべて、「app/webroot/」ののちについか。(しょりしゅうりょう)
  • つまり、いかのようにしていされているばあい、
    http://cake/こんとろーら/めそっど/ぱらめーた
    
    つぎのようにあくせすしたのとおなじことになります。
    http://cake/app/webroot/こんとろーら/めそっど/ぱらめーた
    
2.Cakeのappふぉるだへのあくせす
  • RewriteEngineをONにする。
  • こんとろーらのしていのないURL(つまり、http://cake/appのぱすでよばれたばあい)には、「webroot/」とする(しょりしゅうりょう)。
  • なにかしていされていれば、それをすべて、「webroot/」ののちについか。(しょりしゅうりょう)
  • つまり、いかのようにしていされているばあい、
    http://cake/app/こんとろーら/めそっど/ぱらめーた
    
    つぎのようにあくせすしたのとおなじことになります。
    http://cake/app/webroot/こんとろーら/めそっど/ぱらめーた
    
3.Cakeの「app/webroot」ふぉるだへのあくせす
  • RewriteEngineをONにする。
  • URLでしていされたでぃれくとりがそんざいしているばあいにはしょりをちゅうし。
  • URLでしていされたふぁいるがそんざいしているばあいにはしょりをちゅうし。
  • していされているもじれつをindex.php?url=のかたちにしてついか。しょりちゅうし。
  • つまり、いかのようにしていされているばあい、
    http://cake/app/webroot/こんとろーら/めそっど/ぱらめーた
    
    つぎのようにあくせすしたのとおなじことになります。
    http://cake/app/webroot/index.php?url=こんとろーら/めそっど/ぱらめーた
    

 ここまでをまとめると、

http://Cakeのぱす/こんとろーら/めそっど/ぱらめーた

 というかたちでりくえすとがあったばあい、Cakeのおやでぃれくとりと「app」でぃれくとりのどちらからでも、さいしゅうてきには、

http://Cakeのぱす/appでぃれくとり
               /webroot/index.php?url=こんとろーら/めそっど/ぱらめーた

 というかたちにへんかんされることになります。ためしに、index.php?url=でちょくせつりくえすとしても、Cakeのぷろじぇくとはそのままうごきます。こののち、Dispacherくらすのdispachめそっどがこのぱらめーたをぶんかいしてひつようなでーたをそろえます。

ちゅう:mod_rewriteのないかんきょうでは?
 ちなみに、mod_rewriteをしようできないかんきょうではどうなるか、というと、Cakeをてんかいしたでぃれくとりのちょくかにある「index.php」が「mod_rewrite」のかたがわりをします。
http://cakeのぱす/index.php/こんとろーら/めそっど/ぱらめーた
 というかたちであくせすできます。しかし、htmlふぁいるにちょくせつかきこまれているcssふぁいるやがぞうふぁいるにかんしては、ぱすをじどうてきにへんこうすることはできないため、じぶんでがいとうでぃれくとりをさくせいし、そこにいどうさせてください。また、「app/webroot」にある「index.php」は「mod_rewrite」のかたがわりはしないようなので、「mod_rewrite」をつかえないばあいには、ゆーざにcakeのてんかいでぃれくとりちょくかからあくせすさせるようにしてください。

dispatchのどうさ

 dispatchめそっどのなかでは、まず、URLをぶんかいします。

function dispatch($url, $additionalParams=array()) {
   $params = array_merge($this->parseParams($url), $additionalParams);

 ControllerのURLぶぶんから、こんとろーらめいをさくせいします。camelizeとは、あんだーばーをとりのぞき、かくたんごのせんとうもじをおおもじにするしょりです。

$ctrlName = Inflector::camelize($params['controller']);
$ctrlClass = $ctrlName.'Controller';

 Actionのしていがないばあいには、indexあくしょんがじっこうされます。また、__ではじまっているあくしょんはぷらいべーとなものとしてあつかわれます。

if (empty($params['action'])) {
    $params['action'] = 'index';
}

if((in_array($params['action'], $classMethods)
    || in_array(strtolower($params['action']), $classMethods)) 
    && strpos($params['action'], '_', 0) === 0) {
    $privateAction = true;
}

 このようにして、こんとろーらとあくしょんがきまると、しょりは、Controllerくらすのこーどがじっこうされます。Controllerくらすのこんすとらくたではもでるめいとびゅーのぱすをけっていします。Inflector::classifyは、「posts」から、「Post」をつくりだすめそっどです。「inflector.php」ふぁいるのなかには、めいめいきそくにそったなまえをつくりだすかんすうがいろいろとあります。

if ($this->viewPath == null) {
    $this->viewPath = Inflector::underscore($this->name);
}
$this->modelClass = Inflector::classify($this->name);
$this->modelKey = Inflector::underscore($this->modelClass);

 そののち、dispachは、$controller->constructClasses();として、Controllerくらすのかきのこーどをよびだします。これでひつようなもでるがよみこまれていきます。loadModel()は、「cake\basics.php」のなかにあります。

if ($this->uses) {
    $uses = is_array($this->uses) ? $this->uses : array($this->uses);

    foreach($uses as $modelClass) {

                :
                :しょうりゃく
                :

        if(!class_exists($modelClass)){
            loadModel($modelClass);
        }
                :
                :しょうりゃく
                :
    }
    return true;
}

 いかがだったでしょうか。ふれーむわーくは「そうていない」のさぎょうではひじょうにすむーずにうごきますが、ふれーむわーく「そうていそと」のさぎょうをさせようとすると、そこからはだれもたいけんしたことのないみちのせかいです。おーぷんそーすぷろじぇくとのばあいはじぶんのぎもんにたいしてだれかがすべてこたえてくれるわけではありませんので、じりきでげんいんをついきゅうしかいけつするすきるもみがかなければなりません。そこからあらたなてくにっくがみつかるばあいもあります。ふれーむわーくのかいぜんあんをかんがえたらほうこくしてみましょう。ふれーむわーくのはってんをたすけることができるかもしれません。そして、きじをかいてみるとじぶんのりかいもふかめることができます。

CakePHPをつかったぷろじぇくともたすうこうかいされています。
CakePHPをつかったぷろじぇくともたすうこうかいされています。

ぷろふぃーる
どうその としろう どうぞの しゅんろう

げんざい、(かぶ)こみゅにけーしょん・びじねす・あう゛ぇにゅーでかくしゅWebしすてむをかいはつちゅう。またAsteriskをべーすにした、ぎょうむようないせんPBX、trixbox Proをさぽーとなか。CakePHPほんやくちーむめんば。CakePHP.jpかんりにん。


ちゅうもくのきゅうじんじょうほう
せきゅりてぃぎじゅつしゃ/いんふらどうにゅう
・こきゃくしすてむにたいして、ぎじゅつてきかんてんからのせきゅりてぃこんさるてぃんぐのじっし ・せきゅりてぃあせす...
こんさるたんと/PLMこんさる
■Pro/Eのどうにゅうたちあげぷろじぇくとのめんばーとしてぷろじぇくとへさんか ◇Pro/Eのいんすとーる  ◇...
しすてむえんじにあ/せいぞう・SIかいはつ
けんこうしんだんしすてむのどうにゅう(ようけんていぎからせっけいまで)および、ぱっけーじかいはつ めいんぎょうむはひありんぐ・ぷれ...

(さいしんひづけじゅん)
なまえ(げすとのほうもこめんとをどうぞ):*
あいこん:
なし

ないよう(てきすとのみ1200もじまで):*

とうこうきていにどういして


このきじのとらっくばっくURL:

www.learn-japan.org(romaji/hira/kata/hirakata)