NetBeans 8.0を使っていますが、background scanning of projectsが終わらない問題が発生しました。
PCリソースを食う食う。バッテリーがどんどん無くなっていきました。
強制終了して、再起動しても、スキャンが再開してしまい、終わりませんでした。
NetBeansの削除、再インストールで、スキャンが終了しました。
うーん。
NetBeans 8.0を使っていますが、background scanning of projectsが終わらない問題が発生しました。
PCリソースを食う食う。バッテリーがどんどん無くなっていきました。
強制終了して、再起動しても、スキャンが再開してしまい、終わりませんでした。
NetBeansの削除、再インストールで、スキャンが終了しました。
うーん。
PHPマイクロフレームワークSlimで作るTwilioコールセンターシステム
1.アプリ紹介編
2.環境設定
1.ライブラリインストール編
2.Apache mod_rewrite設定編
の続きです。
WebアプリケーションにはCSSフレームワークのBootstrapを使っています。bootstrapサイトからダウンロードし、
/var/www/html/runa-cca/ |-htdocs ... 公開用ディレクトリ | |-vendor | |-bootstrap ... ここ!
に展開します。Bootstrap単体ではなく、テーマであるBootswatchを使っています。Bootswatchサイトからbootstrap.min.cssと、bootstrap.cssとをダウンロードし、/htdocs/vendor/bootstrap配下のファイルを置き換えます。
ほかに、
・JQuery
・Twilio.js(Twilioクライアントライブラリ)
を使っていますが、ソース指定で利用するため、インストールは不要です。
WebサーバにApacheを使っている場合の設定は、SlimのGitHubに極めてシンプルにまとめられています。
以下のように.htaccessに書いてね、とのことです。さっぱりとした説明ですな。
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [QSA,L]
Slimのパッケージにもサンプルが付いてきます。
RewriteEngine Onとありますので、mod_rewriteを使うということがわかります。
むろん、.htaccessを使うので、ApacheにAllowOverrideの設定が必要になります。
まず、Apacheのconfファイルの設定は、エイリアスを切る場合だと、
Alias /runa-cca/ "/var/www/html/runa-cca/" <Directory "/var/www/html/runa-cca/"> AllowOverride All </Location>
のようになります。
.htaccessをどう書くかなのですが、以下のようにしました。
RewriteEngine On RewriteBase /runa-cca RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ index.php [QSA,L]
「RewriteEngine On」は、Apacheでmod_rewriteを使うために必要です。
「RewriteBase /runa-cca」は、エイリアスを切っているので必要になります。URL書き換えのベースとなります。
実験してみたのですが、RewriteBaseが無いと、
Request exceeded the limit of 10 internal redirects due to probable configuration error.
というエラーがapache_error.logに出力されます。
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^/runa-cca index.php [QSA,L]
と書くと、エラーは止まります。しかし、Runa-CCAのインデックスページ(/runa-cca/)からログインしたとき(/runa-cca/login)にファイルが見つからないと怒られます。
ということで、RewiteBaseは設定が必要。
「RewriteCond」と「RewriteRule」ですが、入り口としては「Apache mod_rewrite Introduction」のページが参考になります。わかりやすく説明されていました。私が使ったのはApache 2.2系列ですが、ドキュメントは新しい方がいいかなあと思って、2.4系列のURLをご紹介しております。
「RewriteCond」は「Apache Module mod_rewrite」を参照。細かく書いてあります。
「RewriteCond %{REQUEST_FILENAME} !-f」は、指定されたファイルが存在しない場合
「RewriteCond %{REQUEST_FILENAME} !-d」は、指定されたフォルダが存在しない場合
です。
Slimのサンプルに「!-d」が無い理由はわかりませんでした。私は付けておくことにしました。
「RewriteRule」は「RewriteRule Flags」を参照。これまた細かく書いてあります。
「RewriteRule ^ index.php [QSA,L]」は、すべてをindex.phpにまわせ、クエリーストリング(/pages/123?one=twoのone=two)は付けたままにしろ(QSA|qsappend)、書き換えルールはここでストーップ(L|last)という意味です。「^」の解釈に悩みましたが、「.*」にしても同じ動作でした。すべて、ということでしょう。
調べるの大変でした・・・。
こちらのページでも紹介していますが、Twilioを使ったアプリケーション(Webクライアント+コールフロー)を作成しました。
以下の本を読みまして、PHPマイクロフレームワークSlim、テンプレートエンジンTwig、ORマッパーilluminate/Eloquentを使って開発しています。入力値検証用にRespect/Validationも試用しています。
あとはフロントエンドにJQueryとBootstrap/Bootswatchを使っています。もちろん、Twilio-phpも使っています。
フォルダ構造は以下の通りとしました。詳細は別途。ルートは/var/www/html/runa-cca/というフォルダとします。
/var/www/html/runa-cca/ |-composer.json ... Composer定義ファイル |-composer.lock ... Composerバージョンロックファイル |-create_table_for_Runa-CCA.sql ...テーブル定義・初期データ投入SQLファイル | |-htdocs ... 公開用ディレクトリ | |-vendor ... 外部のライブラリ | |-bootstrap ... bootstrap | |-lib ... 作成したクラスライブラリ | |-Base ... 設定クラス置き場 | | | |-Controller ... コントローラクラス置き場 | | |-CallFlow ... コールフロー毎のコントローラクラス置き場 | | | |-Model ... モデルクラス置き場 | | |-CallFlow ... コールフロー毎のモデルクラス置き場 | | | |-Model ... ビュークラス置き場 | |-templates ... 作成したテンプレートファイル | |-vendor ... ライブラリ(Composerでインストール)
まずは環境設定です。
そもそもの環境ですが、Macbook Pro Retina ME865J/AでMAMPを動かしています。バージョンは3.0.3を使いました。なので、Apacheは2.2.26、PHPは5.5.10、MySQLは5.5.34になります。
その上で、PHPのパッケージマネージャであるComposerを使って、必要なライブラリをインストールします。
Composerの定義ファイルcomposer.jsonは以下の通り。
{ "require": { "slim/slim" : "2.*", "slim/views" : "0.1.*", "slim/extras" : "2.0.*", "twig/twig" : "1.*", "illuminate/database" : "4.0.*", "Respect/Validation" : "0.5.*", "twilio/sdk": "dev-master" }, "autoload": { "psr-0": {"": "lib/"} } }
参照書籍の記載の通り、以下のようにしてComposerをダウンロードします。
$ cd /var/www/html/runa-cca/ $ php -r "eval('?>'.file_get_contents('https://getcomposer.org/installer'));" #!/usr/bin/env php All settings correct for using Composer Downloading... Composer successfully installed to: /var/www/html/runa-cca/composer.phar Use it: php composer.phar
composer.jsonをアップロードしておきます。Runa-CCAをディレクトリごとアップしておけばよいかと。
で、以下のコマンドを実行します。
composer.lockがある場合は、引数をinstallにすると、lockの内容を再現するようにインストールされます。
$ php composer.phar update Loading composer repositories with package information Updating dependencies (including require-dev) - Installing respect/validation (0.5.0) Downloading: 100% - Installing slim/slim (2.4.3) Downloading: 100% - Installing slim/views (0.1.2) Downloading: 100% - Installing slim/extras (2.0.3) Downloading: 100% - Installing twig/twig (v1.15.1) Downloading: 100% - Installing nesbot/carbon (1.8.0) Downloading: 100% - Installing illuminate/support (v4.0.10) Downloading: 100% - Installing illuminate/container (v4.0.10) Downloading: 100% - Installing illuminate/events (v4.0.10) Downloading: 100% - Installing illuminate/database (v4.0.10) Downloading: 100% slim/slim suggests installing ext-mcrypt (Required for HTTP cookie encryption) slim/views suggests installing smarty/smarty (Smarty templating system) Writing lock file Generating autoload files #twilio/sdkは省略
これで、ライブラリがvendor配下にダウンロードされます。
続きはまた別途。
PHPマイクロフレームワークSlimを使って、Twilioコールセンターシステムを作成しました。
まだいろいろとわからないところ、足りないところも多く、作成中の段階です。
技術的な内容は別途として、まずはアプリの説明からなのですが、こちらのページに書いてみました。よろしければご覧ください。
Webアプリを作っていまして、フレームワークはSlimを使い、テンプレートエンジンはTwigを使っていました。
はじめのうちは、セッションに入れた情報をそのまま使わずに、PHPから変数でTwigに渡していました。しかし、いちいち変数を渡すのはめんどくさい。ViewたるTwigから、セッション情報を直接参照しても、何も問題はないでしょう。Twigでセッションを参照できる方法ないかなあと調べていたところ、ありました。
Using Twig functions inside of Slim
上記サイトに紹介されているとおりに書けば良さそうなのですが、少しハマりました。
セッションに情報を埋め込んだ後に書く必要があります。
つまり、
$app = \Slim\Slim::getInstance(); $twig = $app->view()->getEnvironment(); $twig->addGlobal("session", $_SESSION); $_SESSION['hoge'] = "hohoho";
ではなく、
$app = \Slim\Slim::getInstance(); $_SESSION['hoge'] = "hohoho"; $twig = $app->view()->getEnvironment(); $twig->addGlobal("session", $_SESSION);
と書かなければなりません。
これで、Twigでは、
{{session.hogehoge}}
という形で参照できます。
MySQLで外部キーを設定しようとして、
ALTER TABLE `child` add FOREIGN key(`id`) REFERENCES parent(`id`);
とした場合、「#1452 – Cannot add or update a child row: a foreign key constraint fails」エラーが返ってくることがあります。
childテーブルのidに、parentテーブルのidに存在しない値が入っているとこのエラーになります。childテーブルのidの値を修正すればOKです。
こちらのサイトを参照しました。