Edited at

もそ、プログラミングを学ぶ【PHP&Laravel】〜withメソッドを理解しよう〜

Laravel習得に向け、ソースコードとにらめっこを続ける もそ。

ポチ氏に教えを請いつつ、少しずつ仕組みや動きを

今回はwithメソッドについて。


withメソッドとは

withメソッドは、コントローラからビューに値を渡すことができるメソッド。

いわゆる第一引数'・・・'内はビューで使う変数名、第二引数$・・・ にはビューに渡す値を記述します。

with('変数名', $値)

コードで書いてみるとこんな感じです。↓


Controller.php


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と比べて記述量は増えますが、処理の流れがわかりやすいです。

なので毎回なにかしら新しい発見があってとても楽しい!

これは多言語を学んだ人の特権ですね。

「なんか思ったより全然理解できるし楽しいし、プログラミングの才能開花しちゃったかな〜」

なんて調子に乗りかけましたが、ビューファイルを見て疑問が生まれます。


view.php

@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が添字配列ということはわかるのですが、これを値だと思いこんでしまいどツボにハマってしまいました...。

無題1245.jpeg


変数名はどこ?

そこで変数名がどこで使われているかを明確にするため、先ほどの例を書き直してみました。


Controller.php


public function index()
{
$articles = Tweet::with('user')->orderBy('created_at', 'DESC')->paginate(5);
return view('article.index')->with('moso', $articles);
}


view.php

@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とごっちゃになったりとペーペーではありますが、いろんな処理の流れが見えてくると、実装してうまく動いたときの感動が全然ちがいます。

ものづくり好きがいい方向に動いてよかった、、

まだまだポチには追いつけませんが、がっつり話ができるようになれればいいなぁ。

...もその学習は続く。