ふたりはララベル (Laravel PHP Framework)

PHPフレームワークのLaravelの体験記を書いていきます。こんなタイトルのブログですが萌え系アニメは一秒たりとも観たことがありません。

Laravel

LaravelのEloquentで特定のカラムだけを取得したい

SQL文で言うところの select `name`,`address` from title; をLaravelのEloquentで実現したい場合は、getメソッドを使う。引数が配列になることに注意。Eloquentの結果をただの配列にするtoArrayも併用すると便利。 $titles = Title::get(['name','address']…

LaravelのEloquentでLIKEを使う

LaravelのEloquentでSQL文のLIKE演算子を使いたい場合は、whereの第2引数をLIKEにすればよい。 $titles = Title::where('tags', 'LIKE', "%$tagname\n%")->get()

Formのインプットに隠し属性を持たせる

Formのinputにhidden属性を持たせたいときは、Form::hiddenを使う。 {{ Form::hidden('phone', '090-555-12345') }以下のように出力される。 <input name="phone" type="hidden" value="090-555-12345">

Laravelのチェックボックスやラジオボタンを記入済みにする

Laravelのチェックボックスやラジオボタンを記入済みにするとき三番目の引数にtrueと書けばよい。 echo Form::checkbox('name', 'value', true); echo Form::radio('name', 'value', true);

Eloquent上でバリデーションを設定する

Laravelのバリデーション(入力値の検証)は大変便利という評判だけど、公式ドキュメント上だとコントローラー側でバリデーションする例が書いてある。それよりもEloquent上でバリデーションしたい。Eloquentの中にvalidateメソッドを作ってみた。 class Use…

LaravelでHTMLのエスケープ

LaravelでHTML特殊記号のエスケープというかエンティティをしたい場合は2種類ある。方法1:ヘルパー関数の「e」を使う………最短の関数だな。 $entities = e('<html>foo</html>'); 方法2:Blade側で中括弧を3重にする⇒{{{ }}} {{{ $html }}}ちなみに以下の二つは同じ結果になる…

Laravel専用のユーザ認証Confideを使ってみる

Webアプリケーション・フレームワーク用の認証パッケージはSentryが有名なんだけど、Laravel専用の認証パッケージConfide(カンファイド)というのもある。今回はConfideを使ってみる。 Zizaco/confide · GitHub インストール まずはConfideをインストールする…

Laravelのページネーションをさらにカスタムする

Laravelのページネーションは便利なんだけど、デフォルトだと以下みたいになる。 私の環境ではbootstrapテーマのbootswatchを使っているので、それに会わせたい。bootswatchの場合、ulタグのclassが「pagination」になるのだ。 ちょうどphp - How to impleme…

Laravelのページネーションを使う

Laravel4 日本語ドキュメントにはこんなことが書いてある。 他のフレームワークではペジネーションは苦痛に満ちています。Laravelでは簡単です 確かにすごく簡単だった。Eloquentにpaginate(数字)を指定するだけ!bootstrapと互換性を持たせているのも嬉しい…

配列を分割しながらループさせる

タグをMySQL上で改行区切りのテキストで記録した。どこかでテキストを改行で分割する必要がある。だからblade側でexplodeした。フレームワークって便利だねぇ。 @foreach (explode("\n",$title->tags) as $tag)<li><a href="{{ URL::to('tag/' . $tag) }}">{{ $tag }}</a></li>@endforeach

FORMのアクションに自作のメソッドを指定する

FORMのアクションに自作のメソッドを指定するとき、blade側はこれだけでいい。でも実行すると「form open Unknown action」というエラーメッセージが出る。 {{ Form::open(['action' => 'TitleController@release']) }}この場合はroute.phpにもメソッドを指…

takeメソッドの引数に数字以外を指定して全件取得する

データベースからの取得件数を指定するtakeメソッドだけど、数字じゃなくてallを指定すれば全件取得できる。例:2014年に一致する全データを取得する $take = 'all'; $titles = Title::where('year', '=', 2014)->take($take)->get(); もちろん$takeに数字を…

Blade上でメソッドを使う

フレームワーク初心者の私にとっては、Blade上でメソッドが動くだけで驚くものがある。例:ユーザ名を表示する {{ Auth::user()->username }} 例:blade構文に組み込む @if (Auth::user()->username === 'admin') <p>You Are Administrator.</p> @endif

Bootswatch上でjquery-uiが動作しない

Laravelで、BootstrapテーマのBootswatchとjquery-uiを同時に使うためには、最後にjquery-uiを読み込ます必要があるみたい。以下みたいに。jquery-uiを上のほうに持っていったら動かなかった。 {{ HTML::style('bootstrap/css/bootstrap.css') }} {{ HTML::s…

Form::selectにスタイルシートのクラスを持たせる

LaravelのForm::selectにclass要素を持たせたいときは、4番目の引数に配列として渡す。3番目は初期値になる。Form::textareaとちょっと違うので注意。 {{ Form::select('size', ['0' => '0', '1' => '1'],null,['class'=>'form-control', 'id'=>'select']) }}

Laravelのスター数がCodeIgniterを超えた!

2週間前にフレームワークのGitHubスター数ランキングを作った。PHPフレームワークのベストテン!GitHubでスター数が多い順 - ふたりはララベル (Laravel PHP Framework)そのとき3位だったLaravelがCodeIgniterを抜いて2位になった。とはいえあくまでもスタ…

Form::textareaにスタイルシートのクラスを持たせる

LaravelのForm::textareaやForm::textにclass要素を持たせたいときは、3番目の引数に配列として渡す。ちなみに2番目は初期値になる。ここでは適当にnullでも渡しておく。 {{ Form::textarea('description',null,['class'=>'form-control','rows'=3]) }} {{ F…

DBをEloquent上で結びつける

二つのテーブルがあって、それを結合のように繋げて情報を採取したいときがある。例えばtitleとcharacterという二つのテーブルがある。そのときcharacterを参照するだけで、自動的にtitleからマンガの名前を持って来たい。titleテーブル idname 1ONE PIECE 2…

Eloquentで上位10件を取得する

$comments = Comment::orderBy('id', 'DESC')->take(10)->get();

Laravelのクッキーをセットする

Laravelのクッキーは「Cookie::make」とやってもセットできない。ResponseにwithCookie()をつけて初めてセットできる。 $cookie = Cookie::make('testcookie', 'hello, world', 1); return Response::make($contents)->withCookie($cookie); withCookieはRed…

Laravelでランダムな文字列を生成する

Laravelでランダムな文字列が欲しいときはヘルパー関数を使う。 $string = str_random(40); var_dump($string); この結果は「string(40) "OBbjaakklfT511hmM72uwho5eTtqkDl7Gc6JO7TE" 」となる。

Eloquentでcreateするときは割り当て許可が必要

Eloquentでcreateするときは保護が必要何も設定せずにEloquentでcreateするとエラーが出る。【コントローラ側】 Comment::create(array('year' => 2013)); 【エラーメッセージ】 Illuminate \ Database \ Eloquent \ MassAssignmentException yearEloquentで…

EloquentでwhereRawを使う

Eloquentのwhereは複数条件が書けない。 $users = User::where('votes', '>', 100)->get();複数条件を書きたい場合はwhereRawを使う。SQL文のwhere句をそのまま書けばよい。 $users = User::whereRaw("votes > 100 and section = $section")->get();

timestampを無効にする場合

Eloquentのtimestampは便利だけど、使わない場合は無効にしておかないと「updated_at」がありませんと怒られる。 SQLSTATE[42S22]: Column not found: 1054 Unknown column 'updated_at' in 'field list' (SQL: insert into `users` (`name`, `updated_at`, …

migrateのロールバックを有効にする

Xamppだとcomposerがいらなかったのでcomposerを入れてなかった。そのためcomposerが必要となるmigrateの動作が失敗してしまう。失敗するのはrollback、reset、refreshだ。 # php artisan migrate:reset {"error":{ "type":"Symfony\\Component\\Debug\\Exce…

blade上でforeachの多重ループ

blade上でforeachの多重ループをしたいときは………そのまんま多重にすればよい。 @foreach ($titles as $title) $title['name'] @foreach ($title->tags as $tag) {{ $tag }} @endforeach @endforeach 上記の場合だと、「$title->tags」が配列である必要がある…

別のURLにリダイレクトする

class TitleController extends \BaseController { /** * Display a listing of the resource. * * @return Response */ public function index() { return Redirect::to('/'); }

SessionHandlerでPermission deniedが発生

フォルダ「app/storage/sessions/」の権限設定を忘れていたら、以下のようなエラーが出てしまった。書き込み権限を設定すれば解決した。 SessionHandler::read(): open(/var/www/hello/app/storage/sessions/sess_v5fkabtdmi8ahwh3hsvk6dzmp0, O_RDWR) faile…

blade上でタグのclassを設定する

blade上でHTMLタグにclassを設定したいときは、配列として渡す。例えばLaravelのFormにclass「form-horizontal」を渡すときは以下のようになる。 {{ Form::open(array('route' => array('hello.store'), 'class' => 'form-horizontal')) }}

blade上で変数の存在確認

blade上で変数がnullだと「Undefined variable: 変数名」というエラーになる。これを回避するためにはissetで変数の中身を確認する。 @if (isset( $message )) $message @else Hello @endif ||