52608


Laravel（Laravel5.7）を用いた作業中です。  
現在カレンダーを作成していて、日付をクリックすると違うページに飛ぶというプログラミングです。  
（引き継ぎ作業なく）引き継いだ作業なので、前任者が書いたコードの解読ができません。  
以下、とある

[code]

    {{ link_to(route('xxx.yyy', ['date' => $date->date->format('ymd')]), $date->date->format('m/d')) }}
    
[/code]

・分かっていること  
ymdはyear,month,dateを示しているのは分かった  
$dateがカレンダー表示に関するインスタンスである旨もあった

・質問

  1. `route('xxx.yyy', ['date' => $date->date->format('ymd')])`の`'xxx.yyy'`はルーティングで設定されているファイルのありか？
  2. `['date' => $date->date->format('ymd')]`の`'date' => $date`はコントローラで渡されたメッセージだと思う（laravel本参照していた同じ形のコードがあったため）が、それ以下の`->date->format('ymd')`は？
  3. 最後の`$date->date->format('m/d'))`はブラウザ上で見た感じだと、実際他のページに飛ぶ際のクリックする場所だと思うのですが、その認識で合っているのか

以下参考にしましたが、変数が何を示しているのか分からず、つんでます。  
[link_to](https://readouble.com/laravel/5.dev/ja/helpers.html)  
[テンプレート](https://readouble.com/laravel/5.6/ja/blade.html)

どれか一つでもいいので助言ください。


CC BY-SA 4.0
2019-02-06T09:48:19.590
52592
2019-02-08T14:39:02.920
2019-02-08T04:49:45.310
31799
31799
question
laravel laravel-5
Laravelのページ遷移について


まず： 質問の際にLaravelのバージョンを（マイナーまでは）明記してください。わからなければ `composer.json` をみるか、`artisan
--version`で確認できるかと思います。また、ドキュメント参照される際もバージョン間の差異がそこそこあるので
**使用しているバージョンと一致しているか** を確認するようにしてください。（怠ってると私もたまにハマります。）  
ところでドキュメント参照されている `link_to`
のようなHTMLヘルパですが、これはLaravel5.0でコアから削除され[LaravelCollective](https://laravelcollective.com/)に移管されています。

* * *

まず、今回の件で参照されるべきドキュメントは[ルーティング](https://readouble.com/laravel/5.7/ja/routing.html)のページです。

おそらく標準的な方法でコーディングがなされているのであれば、
`routes/web.php`に（古いものであれば`app/Http/routes.php`に）ルーティングの定義ファイルが用意されているかと思います。

このなかの定義のうち、一部または全てに`Route::get(...) **->name('xxx.yyy')**`のように **name**
が指定されているものがないでしょうか。これは「[名前付きルート(named
route)](https://readouble.com/laravel/5.7/ja/routing.html#named-
routes)」であり、`route($name, $parameters = [], $absolute = true)`でURLに解決できます。

次に

> `$date`はコントローラで渡されたメッセージだと思う / `->date->format('ymd')`は？

肝心の `$date`
がコントローラーでなにを渡しているのかわからないのでなんともいえないのですが、Laravelではdatetimeを持つオブジェクトとして[Carbon](https://carbon.nesbot.com/docs/)を使用しています。これはPHPのDateTimeを拡張しているものなので、[`DateTime::format`](http://php.net/manual/ja/datetime.format.php)同様に日時を任意のフォーマットに整形できます。

3つめについては`link_to`の[実際の内部のコード](https://github.com/LaravelCollective/html/blob/5.7/src/HtmlBuilder.php#L165)をみたほうが早いでしょうか。リンクタグ内部に入るテキストですね。

* * *

ということでまとめると

  1. ルート定義ファイルで定義されてるルートの名前
  2. (Carbonで）日時の文字列フォーマット
  3. そのとおり

となります。

* * *

（追記：コメントの内容について）

## `$parameters`

URLに含むパラメーターです。連想配列で指定します。。単にパラメーターといっても

[code]

    Route::get('user/{id}', ...)->name('user-show')
    
[/code]

のような[パラメーター](https://readouble.com/laravel/5.7/ja/routing.html#route-
parameters)を含むルートの場合、パラメーター内の`id`はそのURLの一部となります。またこのidは省略できません。またパラメーターに含まれないキーに対する値はgetクエリとしてURLに含まれます。  
上記のルートについて

[code]

    route('user-show', ['id'=>1, 'foo'=>'bar'], false)
    
[/code]

のようにした場合、

[code]

    /user/1?foo=bar
    
[/code]

といったURLが得られます。

（このようなルート定義は/user/1, /user/2... のようにユーザーごとにIDでURLを割り当てたりするのに頻繁に使われるルーティングです。）

[任意パラメーター](https://readouble.com/laravel/5.7/ja/routing.html#parameters-
optional-
parameters)やそもそもルートにパラメーターが含まれず、クエリを渡す必要もない場合はからの配列を渡したりそもそも省略することが可能です。（第三引数を使用しない場合）

## `$absolute`

cubickさんのコメントの通り、URLに`http(s)://example.com`、つまり **オリジン部を含めるかどうか**
です。`true`にした場合(デフォルト)は `http://example.com/user/1` 、`false`にした場合は`/user/1`
のようなURLが得られます。（[ヘルパのドキュメント](https://readouble.com/laravel/5.7/ja/helpers.html#method-
route)には「相対URL」「絶対URL」と表記されていますが(コード上もそうですが)わかりにくいですね）


CC BY-SA 4.0
2019-02-06T18:45:57.513
52608
2019-02-08T14:39:02.920
2019-02-08T14:39:02.920
2376
2376
52592
answer