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

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

Laravel

Laravelで現在の環境を確認する

自分で設定した環境を忘れたときはartisanのenvコマンドで確認できる。このコマンドのおかげでapp/config配下の設定ミスに気がついた。 C:\xampp\fireant>php artisan env Current application environment: local

LaravelでFakerを使う

ユーザ名、メールアドレス、テキストなど適当なデータをでっちあげてくれるFakerというOSSがある。 composer.jsonのrequireに「"fzaninotto/faker": "v1.3.0"」と入れるとインストールできる。 Laravel上で使うときはfakerのautoload.phpをrequire_onceする…

Form::checkboxでチェック無し時の値を渡す方法

Form::checkboxでチェック無しの時はInput::get('iam')は0ではなくて無になる。0を渡したい時はhiddenを埋め込んでおく。 {{ Form::hidden('iam', 0) }} {{ Form::checkbox('iam',1) }} ご本人ですか?

Form::checkboxの作り方

例えば以下のようなチェックボックスをLaravelのFormで作りたいときは <input class="iphone-toggle" data-no-uniform="true" name="doit" type="checkbox" value="1">このようにする。 {{ Form::checkbox('doit',true,[],['class'=>'iphone-toggle','data-no-uniform'=>'true']) }}

Laravelで開発環境と本番環境の設定を分ける

まずは開発環境のホスト名を調べる。以下の例だと「windows-PC」がホスト名だ。 C:\Users\public>hostname windows-PC「bootstrap\start.php」の「Detect The Application Environment」の「your-machine-name」をホスト名に変更する。 /* |----------------…

LaravelとCharismaのペジネーションの不具合

LaravelとCharismaでペジネーションをすると表示が崩れる。「vendor\laravel\framework\src\Illuminate\Pagination\BootstrapPresenter.php」を編集して、以下の二箇所にaタグを追加すれば想定通りの表示になる。 /** * Get HTML wrapper for disabled text.…

LaravelでExcelを扱う

Maatwebsite/Laravel-Excel · GitHubが、かなり便利だ。インストール方法はリンク先に載っているけど、composerでインストールして、app.phpにサービスプロバイダーとファサードを登録する。Excelの面倒な日付変換まで勝手にやってくれるのが嬉しい。 $xlss …

Laravelのバックアップとリストア

laravel-backupを使ったら超簡単だった。 schickling/laravel-backup · GitHub laravel-backupのインストール composer.jsonのrequireに "schickling/backup": "dev-master"を追加してcomposer updateする。 laravel-backupの登録 app/config/app.phpのサー…

LaravelとFuelPHPはどっちを選ぶべきか?

下のリンク先では「LaravelとFuelPHPどっちがいい?」という質問に対して回答者が「それはどっちの果物がいい?って質問しているようなものだよ」と諭している。 PHP: Laravel or Fuel PHP? - Stack Overflow色々なフレームワークが盛り上がっている状況で「…

Laravel + Sentryで複数グループを持たせる

管理者権限かつ開発者権限とか渡すと便利。 $developer = Sentry::createGroup([ 'name' => 'developer', 'permissions' => array( 'admin' => 0, 'develop' => 1, ), ]); $admin = Sentry::createGroup([ 'name' => 'administrator', 'permissions' => arra…

Laravel + Sentryで特定の権限だけ処理を変える

まずSentryで開発者グループを作る。その際に'develop' に1を与える。 $developer = Sentry::createGroup([ 'name' => 'developer', 'permissions' => [ 'admin' => 0, 'develop' => 1, ], ]);次にUserをそのグループに所属させ、このユーザでログインする。…

Laravel + Sentryで認証

Laravel + Sentryで認証をやってみた。route.php Route::when('/', 'auth');filter.php Route::filter('auth', function() { if (!Sentry::check()) // If the user is not logged in { return Redirect::guest('user/login'); } });

Confide + EntrustからSentryに乗り換え

Confideを愛用していたけど、Sentryに乗り換えた。Entrustを使ったときに気がついたんだけど、Entrustだと1ユーザに複数グループを持たせることができなかった。 ConfideはLaravel専用というのが気に入っていたんだけどなー。

Eloquentのgetメソッドの結果が0件であることを確認する

get()やall()の結果が0件というか空であることはisEmpty()で確認できる。 $tmps = Title::all(); if($tmps->isEmpty()){ return Redirect::back(); }

listsメソッドの結果に空白を足す

連想配列を作るのに便利なlists()メソッド。実際に使うときは連想配列に空白も欲しい。そういうときは普通に配列を足せばOK。 $houses = ['0' => ''] + House::all()->lists('town', 'id') ;

XserverでLaravelが動かない

XserverだとLaravelのartisanコマンドが効かない。原因はおそらくphpのバージョンだ。例えphpのバージョンを5.3以降に切り替えても「/usr/bin/env php」はphp5.1のままだ。と思ったらこんな記事が!もっと早く知りたかった。 Xserver(レンタルサーバー)でLar…

LaravelでMessageBagを使ってメッセージを表示する

MessageBagを使ってメッセージ表示する。addメソッドの第一引数はキーらしいけど、ここでは空白にした。 $messages = new Illuminate\Support\MessageBag; $messages->add('', 'この操作はできません。'); return Redirect::back()->withErrors($messages);V…

テーブルの要素を取得する

MySQL限定だけど、テーブルの要素を取得する方法。「Field」はMySQL独特の表現だ。 $title = new Title; $query = 'SHOW COLUMNS FROM ' . $title->getTable(); foreach (DB::select($query) as $column) { $columns[] = $column->Field; } これで$columnsの…

Eloquentでテーブル名を取得する

Eloquentを使えばテーブル名を取得できる。 $title = new Title; $title->getTable();

Laravelで'タグ'=>'タグ'のような配列を作る

Laravelで'タグ'=>'タグ'のような配列が欲しいときがあるかもしれない。以下の様な場合だ。 <select name="tag"> <option value="タグ">タグ</option> <select>Viewはこうすれば良い。 {{ Form::select('tag', $tags, null) }}Controllerではlists()を使う。 $tags = Tag::lists('name','name');</select></select>

artisanコマンドのエラー対処

○artisanのmigrate createコマンドで生成したファイルは、別環境に持っていっても動かない。例えばphp artisan migrate:resetの際に、以下の様なエラーメッセージが出る。 >php artisan migrate:reset {"error":{"type":"Symfony\\Component\\Debug\\Excepti…

Laravelのバージョンをあげるとdb:seedに失敗する

デフォルトのUserモデルを使っている人が、Laravelのバージョンをあげるとdb:seedに失敗する。以下のようなメッセージが出る。 C:\xampp\futari>php artisan db:seed {"error":{"type":"Symfony\\Component\\Debug\\Exception\\FatalErrorException","me ssa…

show()の引数で文字列を使う

Controllerのshowのidに数字が来たら普通にfind、文字列が来たらwhereにする。 public function show($id) { if (is_numeric($id)) { $tag = Tag::find($id); } else { $tag = Tag::where('name', '=', $id)->first(); } }

joinとlistsを併用する

listsメソッドの引数の文字列には「.」が使えない。そのためjoinとlistsを併用したい時はASで名前を変える。 というかEloquentでもjoinができたのか。 $lists = Member::select('members.name AS name', 'childs.id AS id') ->join('childs', 'childs.member…

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が読み込まれる。

MySQLの0000-00-00を避ける

MySQLの日付型に空情報を入れると自動的に「0000-00-00」に変換されてしまう。これを避けるにはnullを入れる。 $inputs = Input::all(); if(!$inputs['birthday']){ $inputs['birthday'] = null; }テーブルを作るときには日付型はnull入力を可能にしておく。…

Input::all()から特定の要素を除外する

「Input::except('password')」を使えばInput::all()からpasswordの情報を削除することができる。 $input = Input::except('password')例えばInput::all()だと余計な情報がついてしまう場合に、Input::except()で除外することもできる。事前にInput::get()を…

Laravelのlistsメソッドが超便利

クエリーの結果を連想配列にしてくれるlistsメソッド。今まで知らなかったことを後悔するレベルで便利だった。例えばidをキー、nameを値にした連想配列が欲しいときは以下のようにする。 $names = Member::all()->lists('name','id');

Formの書き方メモ

新規作成のとき {{ Form::open(['route' => 'artist.store','class'=> 'form-horizontal']) }}更新のとき {{ Form::model($artist, ['method' => 'put', 'route' => ['artist.update', $artist->id],'class'=> 'form-horizontal']) }}