忍者ブログ

STEP UP BLOG

Home > ブログ > 記事一覧

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

ログ取ったら接続元が全部同じIPだったよ(号泣)

PHPで独自にロギング機能を実装して、いざ本番リリースしたらタイトルのような不具合が発生しました。
原因はロードバランサを通していたからでした。
$_SERVER['REMOTE_ADDR']

から接続元IPを取っていたところを
$_SERVER['HTTP_X_FORWARDED_FOR']

が送られてくる場合はそちらを取るようにしました。
というより、まずはリリース前にサーバ構成を確認しましょう。。
PR

Laravelの便利関数

以下にまとめられています。
http://laravel.com/docs/4.2/helpers

その中からいくつか気になったのを紹介。
・str_limit
str_limit($value, $limit = 100, $end = '…')
指定した文字数以上だと三点リーダなどの文字を追加して返してくれます。

・str_random
$string = str_random(40);
ランダム文字列を返します。

・dd
dd($value);
ダンプして実行を止めます。

・with
$value = with(new Foo)->doWork();
オブジェクトを返してくれます。メソッドチェーンしたいときに便利です。

他にも便利な関数がたくさんあるのでよかったら調べてみてはどうでしょうか〜。

間違えてgit commit -aしてしまったときの戻し方

がりがりコードを書いてテストしていざコミット。
複数の実装をまとめてやってたから、ここはコミットを分けてと、、
更新したファイルをgit addで追加していって、よし! git add -a -m
-a!!!!!
というようなことがたまにあります。
せっかくのgit addが-aで打ち消される悲しい瞬間です。
こんなときのためのコミットの取り消し方を以下に紹介します。
$ git reset HEAD^

これで1つ前にコミットに戻ります。
ただ、この状態だと更新されたファイルはgit addされている状態のままで、このままgit commit -mしてもすべてのファイルがコミットされてしまいます。
git addを取り消したい場合は
$ git reset HEAD ファイル名

で取り消すことが出来ます。
面倒ですが1つずつgit reset HEADをしていって、再びgit addしてgit commit -mしましょう。
だいたいこういうミスをするのは余裕が無いときなので、もっとおおらかさを胸に仕事したいですね。。

Laravel Tokyo Camp Vol.1に参加してきました

参加してきました。
http://laravelers.doorkeeper.jp/events/17055

・Laravel 5.0 イントロダクション
 ・資料リンク
http://www.slideshare.net/fumiofurukawa/laravel5-introduction-20141120

 ・Laravelの最新情報はLaracastsを見るべし。
https://laracasts.com/

今回のLaravel5のセッションは以下のリンク先を元に発表されました。
https://laracasts.com/series/whats-new-in-laravel-5

その中でも聞いていてこれは! と思ったものをいくつか以下に書いていきます。

 ・PHP名前空間の強制
名前空間が必須となります。
そのおかげでファサードが気楽に使えなくなります。
ファサードとはどこでもクラスを呼べる機能のことです。
$row = User::find(1);


こんな感じの。
Laravelの機能で何が便利か、1つ挙げるとしたらファサードを私は挙げるのですが、
それが使えなくなるかもというのはかなり実装の仕方が変わってくるはずです。

・メソッドインジェクション
今までインジェクションはコンストラクタでしか使うことが出来ませんでした。
class UserController extends BaseController {
    public function __construct(User $user)
    {
        parent::__construct();

        $this->model = $user;
    }


それがメソッドでもインジェクション出来るようになります。
class UserController extends BaseController {
    public function hoge(User $user)
    {
        $user->foo()
    }


これによってインジェクションの細かな制御が出来るようになって、無駄なインジェクションが無くなるのではと思っています。

 ・ルートアノテーション
Laravelのルーティングは基本的にapp/routes.phpに記述します。
Laravel5からはそのルーティングがコントローラにも書けるようになるそうです。
なんかJavaっぽいですね。
http://mattstauffer.co/blog/laravel-5.0-route-annotations


リリースはまだまだ先、2015年1月以降と予想されています。
もう別のフレームワークと言っていいほどがっつり変わるので、4から5への移行には結構な決断が必要ですね。。


その他のセッションも興味深いものばかりでした。
みなさんレガシーコードに困っているのですね。。
自社以外の開発の本音を聞けると、自分のところも! みたいな感じでモチベーションが上がります。
懇親会まで参加していろいろ有意義な情報交換をすることが出来ました。
このような場を設けてくださった主催者に感謝しきりです。
また機会があれば行きたいですね。

Laravel4で日時をフォーマットする

DBから取ってきたデータの日時をお好みの形式で出力する。よくある処理です。
// Controller
$row = User::find(1);

// View
{{{$row->birthday->format('Y年m月d日')}}}


Laravelでは上記のように指定フォーマットで出力できます。
ただ、そのためにはformat()が使えるカラムを設定しないといけません。
vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php
を見てみましょう。
getDates()を探します。
/**
 * Get the attributes that should be converted to dates.
 *
 * @return array
 */
public function getDates()
{
    $defaults = array(static::CREATED_AT, static::UPDATED_AT);

    return array_merge($this->dates, $defaults);
}


ここでカラム名の配列が返されます。
その配列を元に、該当するカラムのデータをCarbonのインスタンスに変換するように実装されています。
変換はasDateTime()で行なっていますね(興味ある人は調べてみてください)。
Carbonとは日時操作ライブラリです。
https://github.com/briannesbitt/Carbon
で、getDates()ですが、デフォルトでcreated_at, updated_atはCarbonのインスタンス化されます。 そこに$this->datesでこちらが指定したカラムを追加できるのですね。
というわけで、Eloquentを継承したモデルで、
class User extends Eloquent {

    protected $dates = ['birthday'];

...
}


とすると、
{{{$row->birthday->format('Y年m月d日')}}}


が使えるようになります。
直感に反しない書き方なので、これはかなり便利ではと思っています。

PAGE TOP