札幌オフィスのKです。 従来は、サーバシステム(LAMP環境)の制作は自社製フレームワークでの開発が中心でしたが、近日はオープンソースのフレームワークを使うことが増えてきています。 自社製フレームワークも悪くないのですが、オープンソースのフレームワークだと、他社から運用を引き継ぐ場合、あるいは逆に開発していて運用は他社に引き継ぐ場合にやりやすいかとも思います。 そこで、今回はソーシャルゲームなどの開発でも広く使われるようになってきていると聞いている FuelPHP について、必要なのにケアされていないDBのTipsを書いてみたいと思います。 ※FuelPHPがどのようなもものかにつきましては、日本語ドキュメントをご参照ください。 (FuelPHP 日本語Document)http://fuelphp.jp/ ■今回制作した環境 今回は、下記の環境で検証を行いました。 Apache 2.2.
開発者でも簡単にインフラ構築できる時代が来ました。Ansibleという強力な環境構築ツールを利用すれば簡単に環境構築ができます。 環境構築のツールはそのほかchef, puppet, dockerなど様々ですが、なぜAnsibleを選択したのかは以前筆者が書いた以下の記事を参考にしてください。 Qiita ソフトウェアエンジニアからみた環境構築自動化ツールの比較、感想 PHPのフレームワークも近年人気を増しているLalavel, 定番CakePHP, 超高速PhalconなどありますがなぜFuelPHPを選んだかというと機能が豊富なことと日本語の情報がたくさんあるからです。単純に好みです。 これからFuelPHP + Ansibleを使った開発のノーハウを次のような順で紹介しようと思っています。 パート1:FuelPHPのインストール編 パート2:メンテナンスモード切り替え編 パート3:デ
やりたいこと ある程度の規模のサービスや構成上db自体を分けた方が効率よく開発、運用できることがあるかと思います。 その際にfuelphpではどのように開発するか考えてみる 想定している構成 ・マスタdbA ・スレーブdbA ・マスタdbB ・スレーブdbB db設定 今回は開発環境を想定して、fuel/app/config/development/db.phpを編集します。 <?php return array( // マスタdbA 'masterA' => array( 'connection' => array( 'dsn' => 'mysql:host=masterA_hostname;dbname=dbname', 'username' => 'master_userame', 'password' => 'master_password', ), 'readonly' => a
FuelPHPネタが増えてきた。 今日はFuelPHPで内部文字コードと出力文字コードが違う場合の対応。 簡単に対応するのであれば、Controllerのafterメソッドでmb_convert_encodingしてあげればよい。 public function after($response) { $this-> template = mb_convert_encoding($this-> template, "SJIS", "UTF-8"); return parent::after($response); } ただ、文字コード周りをちゃんと設定するのであれば以下のようにした方がいいと思う。 1. fuel/app/config/config.phpで文字コード周りの設定を行う <?php return array( /** * アプリケーションの文字コード */ 'encoding'
FuelPHPからデータベースに接続するにはdb.phpを編集すればいいのだが、Microsoft SQL Serverへの接続がうまくいかなかったので、設定方法をメモしておく。 動作環境 Windows Server 2012 R2 (x64) PHP 5.6.11 (x64) SQL Server 2014 FuelPHP 1.7.3 要件 FuelPHPにはSQL Serverの専用コネクタがないので、PDO(PHP Data Object)を用いる。なお、PHPにpdo_sqlsrvドライバーがインストールされている必要がある。 db.phpの設定 fuel/app/config/db.phpやfuel/app/config/development/db.phpの内容は下記のように設定する。 return array( 'default' => array( 'type' => '
HOME20151205NestedSets Model を使って FuelPHP 用コメントボックスパッケージを作った話 こんにちは、こんばんは、昨日に引き続き FuelPHP Advent Calendar 2015 の 5 日目を担当する @sharkpp です。 今回は、一番最後に追加された NestedSets Model (日本語訳は NestedSets Model @ fuelphp.jp を参照) を使って Disqus や Facebook Comments のようなものを貼り付けられる FuelPHP パッケージを作ってみた話をしようかと思います。 実際のパッケージは sharkpp/fuel-commentbox からダウンロードできます。 こんな画面になります。 NestedSets Model の使い方使い方を、、、と言いつつ、実際は公式ドキュメントの Nest
FuelPHP+MySQLでSHOWコマンドの結果を取得 - BTT's blog に DB::query() だと、SHOW PROCESSLIST や SHOW WARNINGS などの SHOW コマンドの結果が取れないという記述がありました。 これは、DB::query() の第2引数に適切な SQL クエリタイプを指定していないためです。 <?php class Controller_Db extends Controller { public function action_index() { Debug::$js_toggle_open = true; $result = DB::query('SHOW PROCESSLIST'); Debug::dump($result); Debug::dump($result->execute()); $result = DB::que
最近がっつりハマってしまったfuelphpのORMモデルメソッド利用時の仕様について。 ORMのCRUDメソッドを利用してDBアクセスした場合、fuelのフレームワークがよかれと思ってアクセス時のデータをキャッシュしてくれます。 そして同じレコードに対するデータアクセスがあった場合には、そのキャッシュデータを返すという仕様になっているようです。 この仕様のせいでどえらいハマってしまったので、記録として残しておきます。 ORMのCRUDメソッド実行時の詳細なSQLクエリ実行の様子や、キャッシュを避けるための方法についてはQiitaにまとめて投稿しておりますので、そちらをご覧ください。 qiita.com 今回得た教訓としては、 ・データの設定や実装が正しいのに、想定する結果とならない時はデータキャッシュを疑え ・フレームワークを信用しすぎない ということ。 この二つは連動しており、フレームワ
ルート設定 デフォルトで、FuelPHPは、fuel/app/view/welcome/index.phpを表示します。 localhost/~codex/にアクセスしたときに、表示される画面がそれです。 今回の場合、ここをfrontページにします。 そして、localhost/~codex/login/にアクセスすると、loginページが表示されるようにしましょう。 routes.phpを修正する デフォルトでwelcome/index.phpが表示されていますので、loginの時のルートを追加します。fuel/app/config/routes.phpを修正します。 return array( '_root_' => 'welcome/index', // The default route '_404_' => 'welcome/404', // The main 404 route
はじめに 意外とおろそかになってしまうこともあるのですが、サービスの規模によってはちゃんとしておかないと後々問題になるのでできる範囲で僕がやっていることをまとめておきます。 とりあえず最低限やっておきたいこと ・sqlのエラーなど致命的なエラーが発生した場合はそれ以降処理が続行されないような実装 ・致命的なエラーが発生した場合はアラートメールなどを送信するようにする ・致命的なエラーが発生した場合はちゃんとログに詳細が残るようにしてあとから調査できるようにする 当たり前の事なのですが、これくらいを実装しておけばとりあえずは大丈夫かなぁと今までの経験上思ってます entryポイントでエラー処理を拾えるような修正 「HttpNotFoundException」は拾えるように最初から書いてあるのですが「HttpServerErrorException」は拾えるような実装になっていないので下記のよ
Session Driverをmemcachedにしてlocalhost以外のサーバーに向けたい時は Sessionクラス拡張しないといけないよ。 ってメモです。 ■ core/configからsession.phpをapp/configにコピー cp ../../core/config/session.php . ■ driverをmemcachedに変更する $ diff session.php ../../core/config/session.php 33c33 < 'driver' => 'memcached', --- > 'driver' => 'cookie', ■ なぜか読み込まれたconfigをdumpしてみるとmemcachedのserversに2個設定がある array(2) { ["cookie_name"]=> string(7) "fuelmid" ["ser
やりたいこと タイトルのとおりですが、http://example.com/?session_id=*** のようにurlでセッションidを引き回してセッションを使用したかった。 ガラケー(フューチャーフォン)時代はcookieが使えない端末が多かったのでこのようなやり方はよくやってました。 まぁ、今ならcookie非対応端末なんてほとんどないしそういう端末はサービス非対応としてしまっても問題なさそう、、、 まずは設定 fuel/core/config/session.phpを編集 // 33行目くらい cookie→file //'driver' => 'cookie', 'driver' => 'file', // 51行目くらい true→false //'encrypt_cookie' => true, 'encrypt_cookie' => false, // 72行目くらい s
fuelphpのマイグレーション機能で苦戦したのでメモ。 環境 fuelphp : 1.7.1 PHP : 5.3.3 mysql : 5.5.34 charsetをutf8mb4にしたため普通に \DBUtil::create_index('table', 'text_data'); とかやると Index column size too large. The maximum column size is 767 bytes.が出て怒られる。 やったこと my.cnfに innodb_file_format = Barracuda innodb_file_per_table = 1 innodb_large_prefixを追加。 キープレフィックスの制限を大きくする(3072バイトまで) ここまでは普通の対応なのだが、ここから荒業。 DBUtilクラスのcreate_tableメソッドに
Fuelphpで用意されているバリデーションのルール以外に 自分で作成したバリデーションを追加したい場合があります。 コアクラスを拡張することによって、新しいバリデーションのルールを作成することができます。 今回はFuelphpのValidationクラスを拡張し、バリデーションのルールを追加する方法をメモします。 ■ バリデーションのルールを追加する方法 「fuel/app/classes」に「myvalidation.php」を作成します。 作成した「myvalidation.php」に追加したいバリデーションのルールを記述します。 下記は半角英数字チェックを追加した場合です。 追加する時は「_validation_」プレフィックスを付けて作成します。 <?php class MyValidation { // 半角英数字チェック public static function _val
サブクエリーはなるべく書かなくて済む様にと考えてたけど、どうしても使いたいところが出てきました。 FuelPHPでサブクエリーの方法を調べると、DB::query()でSQLをベタ書きするか、DB::expr()でサブクエリー部分だけはベタ書きする方法しか見つからず、それだとクエリービルダーを使ってる意味が無い様な気がして、公式ドキュメントを見てみたら、今度は良いのが見つかりました。 クエリービルダーからSQL文字列を得る Query Builder Select – クラス – FuelPHP ドキュメント $sql_str = DB::select()->from('examples')->where('foo', $foo)->compile(); execute()の代わりにcompile()すると、実行せずにSQLを文字列で返してくれます。 public function co
まず話をFuelPHPに限定し、「foreachで配列として利用する」という部分で回答すると、質問にある下記コード $entry = Model_Article::find('all'); にて、Model_Article::find('all')からの呼び出しを追うと、最終的にはQueryクラスのget()メソッド、およびhydrate()メソッドが呼ばれています。 https://github.com/fuel/orm/blob/1.8/develop/classes/query.php#L1184 このメソッドの実装を見てみると、次のように、単に該当モデルのインスタンス作った後、それを(普通に)配列に詰め込んで返しているようです。 public function get() { ... $result = array(); $model = $this->model; $select
こんにちは。 開発チームのワイルド担当、まんだいです。 弊社では、ウェブアプリケーションの構築でfuelphpを利用することが多いのですが、ちまちまフォームを作ってたら手が足りないぜという事態に陥ったので、ドカンとfieldsetを利用して量産体制を行ったところ、大幅に工数の削減ができ、非常に満足している今日この頃です。 今回は、そんなfieldsetのエッセンスをお伝えできればと思います。 なお、FuelPHPのバージョンは1.7.2で確認しております。 fieldsetって何? fieldsetこそ、fuelphpの高速開発の申し子じゃないかと思うのですが、意外にも深く追求した日本語記事が少ないように思います。 ちょっと使ってみた~みたいな記事はたくさんありますがね。 fieldsetは、モデルに定義した情報を元に、メソッド一発でフォームを作る仕組みで 標準的なtwitter boot
以前にこんな記事を書きましたが、 焦点が定まってなくて、一度に色々あれこれ書こうとした結果、ひどい記事になりました。 なぜひどいのかといえば、自分が後で読んで、どれ一つとして理解できず、 結局参考リンクから知識をキャッチアップしなおしたからです。 なので今回は前回より分かりやすく、前の記事の失敗を踏まえて、 なるべく分かりやすく掘り下げて行きたいと存じ上げます。 ちょっと1回じゃ書ききれないので3回くらいで書いていけたらなと思います。 FuelPHPにおけるフォームの作成方法 フォームの作成方法は2種類だと勝手に分けてます。 個別に1つ1つフォームをビューに記述方法と、 オブジェクト指向風にプログラム内部に記述する方法とがあります。 DBと連携させる場合は後者が扱いやすい気がします。 フォームを個別に作る フォームを個別に作りたい場合Formクラスを使います。 バリデーションを組み合わせた
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く