質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

1081閲覧

Laravelのサーバ変数の扱いについて

laravel_prog

総合スコア2

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2022/08/17 02:44

お聞きしたいこと

Laravelでの$_POST,$_SESSIONなどのサーバ変数がどのような立ち位置なのか(使うべきでない,積極的に使うべき など)とその理由をお聞きしたいです.

この質問の背景

PHPでプログラミングを行っていた際には,

php

1$name = $_SESSION['name'];

としてセッション値の取得を行っていました.

一方Laravelでは,公式ドキュメントやQiitaやzennなどの学習サイト,個人ブログ等で,

php

1$name = $request()->session()->get('name'); 2$name = session()->get('name');

などとしてセッション値を取得しているのをよく見かけます.
従来のように,

php

1// controller 2$_SESSION['name'] = $name; 3 4// view 5{{ $_SESSION['name'] }}

などとすることでもセッション値が扱えましたが,それぞれの実体は別物のようでした.
また,ページ遷移の際に$_SESSIONの中身が空になっているようであることも確認しました.
このため,$_SESSION['name']といったサーバ変数を利用した記法は,Laravelに於いて推奨されていないやり方であると判断しました.

Laravel公式ドキュメントからconfig/session.phpにセッション設定が保存されているとあったため中身を確認しましたが抱えている疑問は解消できず,どうやらデータベースにセッション値を保存している?ようだということがなんとなくわかった程度です.

今まで素のPHPのみでフレームワークを触ったことがなかったためかどうかはわかりませんが,個人的にはサーバ変数を介したやり取りのほうがとっつきやすく感じます.

質問

以上から,冒頭の質問内容です.
Laravelでのサーバ変数とリクエストのそれぞれを介したPOSTやSESSIONのやり取りについてご教示いただければと思います.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

例えばLaravelのセッションに関してですが、これはLaravelの独自実装となっていて、PHPの標準機能である$_SESSIONとは別のモノです。なので、これを併用するなどすると事故の元になります。どちらか片方だけ使う分には問題ありませんが、個人的にはLaravelのセッションを使った方が色々と楽かと思います(セッションドライバを変えることで複数のサーバ間でセッション情報を共有するなどの処理もかなり簡単にできます)。

$_POSTなどの他のスーパーグローバル変数も含めてですが、Laravel内では下手に使うとおかしな挙動になる可能性もゼロとは言えないので、使う必要がない(=Laravel側で用意されている)場合は使わないのがベストだと思います。

投稿2022/08/17 03:16

AbeTakashi

総合スコア4537

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

laravel_prog

2022/08/17 04:54

なるほど. やはり用意されているものを使うのがいいのですね. お恥ずかしながらセッションドライバという単語は初耳でしたが, 確かにサーバ変数を直接参照する設計の場合,その環境への依存度が高くなり,サーバを跨いだ処理をする際に不便が生じることが理解できました. 実際にサーバを跨ぐのがどのような場合かは勉強不足のため思いつきませんでしたが,今後そのような機会があれば今回の件を参考にさせていただきます. フレームワーク側で保障されている機能を使うのがやはり安心ですね. 大変勉強になりました. ご回答ありがとうございました.
AbeTakashi

2022/08/17 05:12

セッションドライバというのは、単純に書くならセッションデータを保存する場所を変える機能かと思います。PHPの標準セッションは単純にディスクストレージ上にファイルとして保存しますが、それを別のサーバにあるデータベースなりRedisなりに変更することで、複数サーバに跨いだセッションデータの管理ができるようになります。直のPHPでも直接Redisを操作してセッションデータを保存したりする実装もよくありますが、Laravelではその辺をいちいち実装することなく、通常のセッションとして使用するイメージで使えるので楽かと思います。 参考) https://noumenon-th.net/programming/2020/02/03/laravel-session1/ サーバを跨ぐケースは、単純に上流にロードバランサーを設置してフロントサーバを複数台設置し負荷分散や冗長性を担保する場合など、わりとあると思います。 参考) https://www.seeds.ne.jp/case/constitution/server01.html
laravel_prog

2022/08/17 05:45

追記いただきありがとうございます. セッションドライバの主要な部分について理解できました. 確かに既に機能を提供してくれているのはありがたいですね. 有用ケースの具体例もご提示くださりありがたい限りです. 知らないことが多く,精進せねばと思う次第です. それぞれ参考リンクの共有もしていただき,大変理解が深まりました. ご丁寧にご指摘いただきありがとうございました.
guest

0

フレームワークは今回出されている疑問のように「見えないところでコア部分がうまくやってくれていて、機能を使ってさえいれば実現できる」ことが多くあります。
ブラックボックスになっているということですね。
もちろんコードを追っていけば、ブラックボックスとなっているような箇所の根本理解もできるようになるとは思いますが、余程何かしらの問題が起きてない限り、そこまでやる必要がなく、「機能使えば実装できるんだな」くらいの理解で良いと思います。

スーパーグローバル変数の直接参照について言及されている質問もありますので、
こちらとあわせてみると理解が進むかもしれません。
スーパーグローバル変数に直接アクセスしない方がいい理由

投稿2022/08/17 02:56

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

laravel_prog

2022/08/17 04:41

やはりこういったフレームワークの場合,基本的に見えない部分は触るべきでなく,機能が用意されているならそちらを使うべきなのですね. もちろん理解を深めるための検証や実装の場合は別としてですが. 過去の質問へのリンク共有ありがとうございます. スーパーグローバルへの直接アクセスを控えるべきという設計思想を初めて目にしました. 確かに書き換えの危険性や,クリーンな設計,テストをする場合など納得できる部分が多かったです. 大変勉強になりました. ご回答いただきありがとうございました.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問