いつも心にバーレーワイン

ExcelのvbaとかeccubeとかECサイトのリスティング広告設定とかよろずやってます。Laravelはじめました。

Laravel5.2で$errorsがUndefinedでエラー!?

Laravel5.2で$errorsがUndefined!?

相変わらず初心者ララベラーしてます。

Validateのエラーが見れない?

普通にValidateを書いてさぁviewで処理しようかなと$errorsの処理を書いたところ・・
「Undefined variable: errors」
・・はて?

5.1→5.2で$errors変数の名前が変わったのかなと思ったところそんな記載もない。

解決

どうやらmiddlewareまわりが変わった事が原因のようで・・

App\Http\Kernel.php

protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
~略~

protected な’Web'さんの中にエラー関連がいます。
ですので、

App\Http\routes.php

Route::group(['middleware' => ['web']], function () {

Route::get('/','HogehogeController@index'); // ← ここにRoute処理を書く

});

// ↓ ココとかだとルーティングは正常に動くけど$errors変数とか拾えない
Route::get('/','HogehogeController@index');

気づけばわかるけど某サイトなどで学習してる人はハマると解決しづらい5.2の変更でした。

Excelで名前定義するときに空白セルを省く方法 +ひと工夫

Excelで名前定義するときに空白セルを省く方法 +ひと工夫

Excelで名前定義するときに空白セルを省く方法

Excelでリストの選択値を別シート管理する場合、将来的な増に備えて余裕を持ちたいが
空白の選択リストが入るのはイヤだよって場合、
名前定義の参照範囲にOFFSET関数とCOUNTA関数を組み合わせて

=OFFSET(管理!$B$4,0,,COUNTA(管理!$B$4:$B$104))

のように書く事はネットで見つかると思います。
※この例だと管理シートの B4セルからB104セルまでの空白を除いたセルをリスト化。
f:id:taketnak:20160118221140p:plain


この書き方だと先頭の値の行を削除した場合、名前定義がおかしくなって
リストが動かなくなっちゃうんですよね・・・

先頭の値の行を削除すると参照範囲が不正となる。
f:id:taketnak:20160118221414p:plain


で、ひと工夫なんですが参照範囲を1つ上(この例だと項目名)からにして、

=OFFSET(管理!$B$3,1,,COUNTA(管理!$B$4:$B$104))

このように「B4セルから0番目開始」を「B3セルから1番目開始」にしておくことで
1つ目の値の行を削除されても名前定義が壊れることなく使用する事ができます。

f:id:taketnak:20160118221720p:plain

・・予期せぬ障害にならないためのひと工夫でした。

Laravel5.2でHTMLクラスとFormクラスを使おう

Laravel5.2でHTMLクラスとFormクラスを使う

ちょっぴり迷ったのでメモ。

0. はじめに

LaravelのHTMLクラスとFormクラスの2つのヘルパークラスは4から5になった時に
統合からはずれ、別途インストールが必要になりました。
5.0、5.1それぞれ記述が違いますがそれらは割愛します。

1. composer.jsonの編集

composer.jsonのrequireに「"laravelcollective/html": "5.*"」を追加します。
※illuminateじゃなくてlaravelcollectiveだよ。

composer.json

"require": {
~省略~
"laravelcollective/html": "5.*"
~省略~

編集したら使用しているターミナルで

$ composer update

2. app.phpの編集

config/app.phpの「providers」と「aliases」に下記を追加

'providers' => [
~省略~
Collective\Html\HtmlServiceProvider::class,
~省略~

'aliases' => [
~省略~
'Form' => Collective\Html\FormFacade::class,
'Html' => Collective\Html\HtmlFacade::class,
~省略~

これで上記2クラスが使えるようになります。