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

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

blade

Bladeのforeach内で変数をカウントする

Bladeのforeach内で変数をカウントするには…普通にPHPを書けばよい。 @foreach($titles as $title) @endforeach

自作パッケージのBladeでextendsする

自作パッケージのBladeでextendsしたいときはパッケージ名を指定すればよい。 @extends('mypackagename::default') @section('content') <div class="container bs-docs-container"> <div class="bs-docs-section"> <p>Hello</p> </div> </div> @stop

Configに設定した値でセレクトボックスを作る

Formのselectを使うときに、そのvalueはConfigから持ってくることが多い。私の場合は以下のようにしている。 {{ Form::select('movies[]', Config::get('movies.title'), $movies , ['multiple' => true,'data-rel'=>'chosen','class'=>'span12']) }}

Laravelで印刷専用のスタイルシートを指定する

Laravelで印刷専用のスタイルシートを指定するには、配列の引数を渡す。 {{ HTML::style('charisma/css/fullcalendar.print.css',['media'=>'print']) }}

Form::openからメソッドを指定する

Form::openからメソッドを指定する。 {{ Form::open(['action' => ['UserController@change', $user->id]]) }} {{ Form::close() }}

Form::selectの効率的な書き方

Form::selectはlistsメソッドを使えば一行で書ける。コントローラ側 $lists = Movie::lists('title', 'id');ビュー側 {{ Form::select('director_id', $lists, null, ['data-rel'=>'chosen']) }}もしくはコンフィグファイルを使ってもよい。コンフィグファイ…

Bladeテンプレートを複数結合する

@includeを使えば簡単に結合できる。 <div class="form-controll"> @include('title.form') @include('title.button) </div>この場合、titleフォルダのform.blade.phpとbutton.blade.phpが読み込まれる。

FormをModelと一致させる

Blade側でFormをModelと一致させる。 {{ Form::model($title,[]) }}そうするとController側でこういう書き方ができて楽。 $title = Title::find($id); $inputs = Input::all(); $title->update($inputs);

HTML::styleでID指定する

HTML::styleでIDを指定したい場合は例によって引数で渡す。 {{ HTML::style('ashley/css/colors.css',['id'=>'colors']) }}<link id="colors" media="all" type="text/css" rel="stylesheet" href="http://localhost/ashley/css/colors.css"></link>

Laravelではページのタイトルをどうつければいいか?

例えば「無題のドキュメント」というタイトルをつけたいとして…。 方法1:Blade上にタイトルを書く 以下のようにBladeを設定する。 @extends('layout.default') @section('title') 無題のドキュメント @stop @section('content') <p>Hello World.</p> @stop layout…

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

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

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

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

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

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

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']) }}

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

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

blade上でforeachの多重ループ

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

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 ||

Laravelでhtmlのヘッダタイトルをつける

ようやくindexページまで来れた。今回はBlade上でtitleタグをつけるけど、コントローラー上でタグをつける方法もある。「app\views\index.blade.php」を作った。 @extends('layout.default') @section('title') Index Page @stop @section('content') Hello …