Laravel習得に向け、ソースコードとにらめっこを続ける もそ。
ポチ氏に教えを請いつつ、少しずつ仕組みや動きを
今回はwithメソッドについて。
##withメソッドとは
withメソッドは、コントローラからビューに値を渡すことができるメソッド。
いわゆる第一引数'・・・'内はビューで使う変数名、第二引数$・・・ にはビューに渡す値を記述します。
with('変数名', $値)
コードで書いてみるとこんな感じです。↓
public function index()
{
$articles = Tweet::with('user')->orderBy('created_at', 'DESC')->paginate(5);
return view('article.index')->with('articles', $articles);
}
この辺の流れはRailsと同じですね。
むしろRailsよりもキーとバリューの記載がわかりやすいので、個人的にはLaravelの記述の方が好きかも。
Railsは"return"を記述しなくても基本的にRails側で処理して値を返してくれたりmigrateしたらDBを自動で繋いでくれたりするんですが、なんというか、便利すぎてどういう処理になっているか分からないんですよね。
その点LaravelはRailsと比べて記述量は増えますが、処理の流れがわかりやすいです。
なので毎回なにかしら新しい発見があってとても楽しい!
これは多言語を学んだ人の特権ですね。
「なんか思ったより全然理解できるし楽しいし、プログラミングの才能開花しちゃったかな〜」
なんて調子に乗りかけましたが、ビューファイルを見て疑問が生まれます。
@extends('layout')
@section('content')
<div class="contents article">
@foreach($articles as $article)
<div class="content_post" style="background-image: url({{$article->image}});">
<div class="more">
<span><img src="/images/arrow_top.png"></span>
<ul class="more_list">
<li><a href="/articles/{{$article->id}}">詳細</a></li>
</ul>
</div>
<p>{{ $article->text }}</p>
</div>
@endforeach
{{ $articles->render() }}
</div>
@endsection
「...あれ?これコントローラで記述した変数名、使ってなくね?」
「え、じゃあ何でコントローラでわざわざ変数名つけてるんだろ?」
もそが何故そう考えたかというと、4行目にある
@foreach($articles as $article)
↑ここで**$が2回使われていたから**。
$articlesが添字配列ということはわかるのですが、これを値だと思いこんでしまいどツボにハマってしまいました...。
##変数名はどこ?
そこで変数名がどこで使われているかを明確にするため、先ほどの例を書き直してみました。
public function index()
{
$articles = Tweet::with('user')->orderBy('created_at', 'DESC')->paginate(5);
return view('article.index')->with('moso', $articles);
}
@extends('layout')
@section('content')
<div class="contents article">
@foreach($moso as $article)
<div class="content_post" style="background-image: url({{$article->image}});">
<div class="more">
<span><img src="/images/arrow_top.png"></span>
<ul class="more_list">
<li><a href="/articles/{{$article->id}}">詳細</a></li>
</ul>
</div>
<p>{{ $article->text }}</p>
</div>
@endforeach
{{ $moso->render() }}
</div>
@endsection
@foreach
以下の記述は$moso
という名前でコントローラから呼び出した添字配列で、そのなかの一つの要素$article
を取りだしているという意味になります。
なので@foreach〜@endforeach
内の$article
は配列のひとつの要素、つまりレコードの一行を表しています。
{{ $moso->render() }}
はページネーションを実装しています。
なるほど〜!
--
ファイルのディレクトリがRailsとごっちゃになったりとペーペーではありますが、いろんな処理の流れが見えてくると、実装してうまく動いたときの感動が全然ちがいます。
ものづくり好きがいい方向に動いてよかった、、
まだまだポチには追いつけませんが、がっつり話ができるようになれればいいなぁ。
...もその学習は続く。