1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-05-14

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とごっちゃになったりとペーペーではありますが、いろんな処理の流れが見えてくると、実装してうまく動いたときの感動が全然ちがいます。
ものづくり好きがいい方向に動いてよかった、、
まだまだポチには追いつけませんが、がっつり話ができるようになれればいいなぁ。
...もその学習は続く。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?