c4se記:さっちゃんですよ☆

.。oO(さっちゃんですよヾ(〃l _ l)ノ゙☆)

.。oO(此のblogは、主に音樂考察Programming に分類されますよ。ヾ(〃l _ l)ノ゙♬♪♡)

音樂は SoundCloud に公開中です。

考察は現在は主に Scrapbox で公表中です。

Programming は GitHub で開發中です。

Slim (PHP) のルーティング

余りにSinatraに慣れて、Slimのroutingで躓いた故、書きます。

[Slim Framwork]( http://www.slimframework.com/ )
[codeguy/Slim]( https://github.com/codeguy/Slim ) GitHub
A PHP micro framework inspired by Sinatra
Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs. Slim is easy to use for both beginners and professionals. Slim favors cleanliness over terseness and common cases over edge cases. Its interface is simple, intuitive, and extensively documented — both online and in the code itself. Thank you for choosing the Slim Framework for your next project. I think you're going to love it.

其の前に、Sinatra (Ruby) のrouting

micro web framworkの根源Sinatraでのroutingの例を挙げます。
bundle installにてSinatraをsettingすれば、config.ruとmain.rbを書けば終ります (file名は自由です)。

# config.ru
require './main'
run Sinatra::Application

と、

# encoding = utf-8
# main.rb

require 'sinatra'
require 'erubis'

get '/' do
  erb :index
end

です。
其の後、bundle exec rackup config.ruとすれば、適当なポートでWEBrickが立上がり、ページを見る事が出来ます。サーバにthin等を使いたい時は、-s optionを付けましょう。ん? Apache? mod_passengerを使うそうです。
cf. [Index - Phusion Passenger application server]( https://www.phusionpassenger.com/ )

Slimのroutingで躓いた所

二点で躓きました。

  1. PHP + Apacheを余りに知らなかった。
  2. DocumentRoot直下ではなく、更に下のdirectoryで開発していた。

Rubyばかり触ってきたもので……(〃l _ l) Apacheのroutingは昔少しやったのですが、忘れていました。DocumentRoot直下より下で開発していた理由は、怠け者です。

PHP + Apacheを余りに知らなかった

.htaccessは知っていますか? 私はなんとか知っていました。mod_rewriteも使った事が有りますが、忘れています。URLのroutingは、Apacheでは.htaccessに書きます (nginxやlighttpdに就いては調べてください)。
httpd.confにて設定したDocumentRootを/と書く事にします。私はXAMPPからPHPApacheを入れたので、C:\xampp\htdocsです。
.htaccessは、httpd.conf等設定ファイルの代わりであり、DocumentRoot以下の洞所にでも、何個でも置いて好いものです。Apache自体の設定を弄れない場合、.htaccessApache管理者から許可されていれば、置くだけで自動的に読み込まれます (只しサーバ性能は落ちますので、あなたが管理者であれば設定ファイルを弄りましょう)。/en/hello/へアクセスした場合、

+/
-.htaccess
  +en/
    -.htaccess
    +hello/
      -.htaccess
      -index.php

Apacheは、/.htaccess/en/.htaccess/en/hello/.htaccessと、三つの.htaccessを読み込みます。有ろうが無かろうがアクセスの度に.htaccessを探し、有れば読み込みます。
cf. [Apache チュートリアル: .htaccess ファイル - Apache HTTP サーバ]( http://httpd.apache.org/docs/current/ja/howto/htaccess.html )
AphacheでのURL routingは、(設定ファイルか或いは) .htaccessにて、mod_rewriteを使って実行します。
Slimには、Slim用の.htaccessが同梱されています。composerでinstallしたのならば、vendor/slim/slim/.htaccessを、Slimを使うディレクトリへcopy & pasteしましょう。

DocumentRoot直下ではなく、更に下のdirectoryで開発していた

まぁ/en以下で開発しようとしたとしましょう。他のサイトを (課題で) 一緒に扱っていたりして、面倒だった丈です。Slimも/enへinstallします。.htaccess/enへ置きます。Slimのtutorialの通り、index.phpを作り、此れも/enへ置きます。

+/
  +en/
    +vendor/
      +composer/
      +slim/
      -autoload.php
    -.htaccess
    -composer.json
    -composer.lock
    -composer.phar
    -index.php

さて、index.phpの中身は、

<?php
require 'vendor/autoload.php'

$app = new \Slim\Slim();
$app->get('/hello/:name', function ($name) {
    echo "Hello, $name";
});
$app->run();

殆どSinatraですね! んーんと(〃l _ l) 洞所へアクセスすればいいんだろう。/en/hello/sachirouは、Apacheデフォルトの404 Not Foundだ……。/en/index.phpへアクセスしても仕方ないしな……。
.htaccessを見ると、なんだかindex.phpへリダイレクトする様に成っています。ふむ。書き換えましょう。

RewriteEngine On

# Some hosts may require you to use the `RewriteBase` directive.
# If you need to use the `RewriteBase` directive, it should be the
# absolute physical path to the directory that contains this htaccess file.
#
# RewriteBase /
RewriteBase /en/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]

8行目、RewriteBaseを足しました。見れるように成りました。此の.htaccessで書き換えられ、/index.phpを呼び出そうとしてたのか。それは404 Not Foundだ。