X



【PHP】Laravel【フレームワーク】 Part.5

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん
垢版 |
2021/04/16(金) 10:14:08.30ID:???
テンプレ追加修正お願いします

Laravel
ウェブ職人のためのPHPフレームワーク

本家
https://laravel.com/

git
https://github.com/laravel

動画チュートリアル(英語)
https://laracasts.com/

日本語
http://laravel.jp/

書籍
Laravel リファレンス[Ver.5.1 LTS 対応] Web職人好みの新世代PHPフレームワーク

Laravelエキスパート養成読本[モダンな開発を実現するPHPフレームワーク!] (Software Design plus)

※前スレ
【PHP】Laravel【フレームワーク】 Part.4
https://medaka.5ch.net/test/read.cgi/php/1613209188/
0868nobodyさん
垢版 |
2021/05/22(土) 09:11:01.61ID:???
>>866
同時アクセスを考えた場合でも誤差?
0869nobodyさん
垢版 |
2021/05/22(土) 09:25:10.32ID:???
>>868
1件あたりのデータの取得時間の差はμsレベルだぞ。単にmodelオブジェクトにhydrateするかしないかって話だから。
その上でどれぐらいの同時アクセスを想定してる?そのレベルの誤差を気にする前に、サーバーのスケールアウトを考えるべきだと思うけど?
0870nobodyさん
垢版 |
2021/05/22(土) 09:29:35.94ID:???
>>867
故人www生きろ!

てツッコミは置いといて。

それだと条件クエリをビルドしているだけだから、getもfindも論外だと思うな。加えてLaravelではfindは主キーを使って検索するってコンテキストになってるから、getより筋が悪いまである。
0871nobodyさん
垢版 |
2021/05/22(土) 10:23:28.00ID:???
>>867
>Test::getSomething()->get()
getSomething()の中でgetもやるから->get()はいらないんだよ、なんならget後の加工までやるぞ
findの方は知らん
0872nobodyさん
垢版 |
2021/05/22(土) 10:43:54.38ID:???
getSomething()の中でget発行したらダメでは?
あくまでもローカルスコープはクエリの組み立てまでにとどめるべき
0873nobodyさん
垢版 |
2021/05/22(土) 10:53:09.93ID:???
いやだからLaravelのスコープとは関係ないんだってば
単に便利なgetメソッドを関数として書くだけ、目的はコントローラ内の記述を減らすこと
0874nobodyさん
垢版 |
2021/05/22(土) 12:36:59.99ID:???
> 単に便利なgetメソッドを関数として書くだけ、『目的はコントローラ内の記述を減らすこと』

こういうのをControllerに書かざるを得ないという仕様な時点で狂ってる。
CakePHPとかと一緒。
0875nobodyさん
垢版 |
2021/05/22(土) 12:44:49.18ID:???
>>874
そんな制約はLaravelに無いよ
勝手にそんなアホな実装してる奴がいるだけ
0876nobodyさん
垢版 |
2021/05/22(土) 12:58:16.27ID:???
アプリのソースをどういう構成にするかは作る側が決めることだよね
0877nobodyさん
垢版 |
2021/05/22(土) 14:02:11.84ID:???
コントローラにすべての処理を書くのを批判する奴がたまに居るけど
どこに書こうが一緒やん
大規模になればDIでコンストラクタでサービスのインスタンスを受け取る手法もありとは思うが
そもそも殆がDIする必要もないしな
0878nobodyさん
垢版 |
2021/05/22(土) 15:22:43.58ID:???
>>840
予算の都合だよ
これ以上知るとバカらしくてやってられなくなるぞ
0879nobodyさん
垢版 |
2021/05/22(土) 16:24:37.63ID:???
>>877
ファットコントローラは駆逐すべき
0880nobodyさん
垢版 |
2021/05/22(土) 16:31:56.07ID:???
>>879
これ実際どんな弊害があるのかな?
モデルに関する処理は長々とコントローラに書かずにモデルに書いて、共通処理は別の場所に書けば、コントローラで処理を書いてもそこまで長々と書くこともない気がする
それをサービスに追い出したところでサービス側がコントローラと同じようになるだけだしあんまり意味がない気がしてならない
0881nobodyさん
垢版 |
2021/05/22(土) 16:54:01.89ID:???
共通化できそうなところは共通化して使いまわさないと改修時にコピペ箇所の改修漏れが発生しやすい
0882nobodyさん
垢版 |
2021/05/22(土) 17:17:57.93ID:???
複数のコントローラで利用したい処理を1ファイルにまとめたいのですが
CakePHPのヘルパーに相当する機能は何でしょうか。
0883nobodyさん
垢版 |
2021/05/22(土) 17:44:14.18ID:???
>>882
継承かトレイトかライブラリ化、用途に合わせて選べ
0884nobodyさん
垢版 |
2021/05/22(土) 17:54:16.52ID:???
>>882
Laravelは「継承よりコンポジション」てモダンな考え方に基づくから、traitを使うことが多い。
0885nobodyさん
垢版 |
2021/05/22(土) 17:59:49.95ID:???
ただ共通化て言葉は、ベテランのエンジニアがよく警鐘を鳴らしているものだから、本当にその共通化が必要なものかはよく考えた方が良い。
0886nobodyさん
垢版 |
2021/05/22(土) 22:53:39.48ID:???
ファットコントローラーの害が感覚的にわからないならプログラマとして必要なセンスがない
Cで言うと全部main関数に処理書いちゃってmainがバカでかくなってる初心者みたいなもん
0887nobodyさん
垢版 |
2021/05/22(土) 23:05:55.33ID:???
俺はセンスあるといいたげだな
0888nobodyさん
垢版 |
2021/05/22(土) 23:44:47.14ID:???
その説明では納得しないでしょ。ファットコントローラーがダメな理由は、コントローラーの責務を無視して処理を追加した結果だから。
責務を無視してしまうとMVCの構造が壊れてしまうので、MVCがメンタルモデルとして定着しているエンジニアは、そのコードを読んだり改修することが極めて困難になる。
0889nobodyさん
垢版 |
2021/05/23(日) 00:03:28.90ID:???
つかそういう事は10年前1万回議論されて結論出てるんだから
ググレカスって話だよな
0890nobodyさん
垢版 |
2021/05/23(日) 00:17:22.71ID:???
>>883,884
トレイトを使う場合、のディレクトリに保存するのでしょうか?
0891nobodyさん
垢版 |
2021/05/23(日) 00:23:06.54ID:???
>>890
正解は無いんだけど、俺の場合controller用なら、Controllersディレクトリ配下にConcernsてディレクトリ作ってそこに格納する。

このやり方はRails由来だね。ただLaravelの人気パッケージでも取り入れられている手法でもあるので、お勧めしておく。
0892nobodyさん
垢版 |
2021/05/23(日) 00:26:29.46ID:???
そういや
php artisan make:trait
ってコマンド結局まだ実装されてないんだっけ?
0893nobodyさん
垢版 |
2021/05/23(日) 00:35:46.13ID:???
ファットコントローラーって名前が嫌だからコントローラーは太らさないようにしてる
0894nobodyさん
垢版 |
2021/05/23(日) 00:39:22.18ID:???
別に最初はコントローラーファットでよくない?
途中のリファクタリングの過程でファットでなくすりゃいいだけだし
0895nobodyさん
垢版 |
2021/05/23(日) 00:44:58.07ID:???
俺はControllersにTraitsってディレクトリ作って入れてたな
0896nobodyさん
垢版 |
2021/05/23(日) 01:11:40.15ID:???
>>892
そんな議論て過去にあったの?traitてPHP側で実装されたものじゃん?
0897nobodyさん
垢版 |
2021/05/23(日) 08:34:16.10ID:???
自作でartisanコマンド追加してる人は結構いるってくらい
0898nobodyさん
垢版 |
2021/05/23(日) 10:24:20.87ID:???
誰一人としてファットコントローラーがダメな理由を納得出来るレベルで言えないのだから
結局外に追い出した所でそこのコードは同じことになるのだしなぁw
意味ない論議なんだよ
0899nobodyさん
垢版 |
2021/05/23(日) 10:41:00.36ID:???
お、煽りおじさんがきたぞ
いい天気なんだからぬこの散歩でも行って来いよ
0900nobodyさん
垢版 |
2021/05/23(日) 10:43:13.81ID:???
コードを書けば行数が増えるのは当たり前で、大きくなるのが嫌だからどうにかしようというのは、そもそもが違うよね。
行数増えて困ってる人というのはIDE使ってないの?何なの?
0901nobodyさん
垢版 |
2021/05/23(日) 10:50:06.55ID:???
下手な逆張りしてケンカを煽ろうとしても無駄だぞ
盛り上げたかったらもうちょっとマシな話題持って来いや
0902nobodyさん
垢版 |
2021/05/23(日) 11:12:55.38ID:???
ファットコントローラ解消してもファットモデルになるだけ
0903nobodyさん
垢版 |
2021/05/23(日) 11:18:38.41ID:???
結局どこかには処理を書くのだから別に外に追い出した所でそれがベストですって
言う説明をしていたらそれこそ初心者レベルかと
同じ処理を何度も書かないとか基本的な事を守れていたらいいと思う
そこをコピペとかでやってたりするのは明らかに初心者だろうが
0905nobodyさん
垢版 |
2021/05/23(日) 11:40:14.26ID:???
>>904
じゃあファットコントローラーは何故ダメなの?
0906nobodyさん
垢版 |
2021/05/23(日) 11:43:04.23ID:???
それぐらいぐぐれよ初心者かよ
0907nobodyさん
垢版 |
2021/05/23(日) 11:59:04.38ID:???
ダメな理由が全く納得いかないものしか無いやんw
頭悪いからダメと言うしかないの?www
0908nobodyさん
垢版 |
2021/05/23(日) 12:00:06.54ID:???
真面目にここにいる奴仕事で作ってるの?w
お前のコントローラーは実装が数行しか無いの?w
趣味の奴はでしゃばるなと思うわw
0909nobodyさん
垢版 |
2021/05/23(日) 12:02:34.38ID:???
クラスごとに適切な役割分担をしようって話でファットコントローラーだからとかファットモデルだから全部駄目って単純な話じゃないでしょ
モデルだけで不十分ならRepositoryパターンやValueObjectパターンや他のデザインパターンも入れれば良いし、コントローラーとモデルだけで話が完結する話じゃないじゃん
0910nobodyさん
垢版 |
2021/05/23(日) 12:08:03.91ID:???
どう考えてもだめな理由が分からない方が頭悪いだろ
0911nobodyさん
垢版 |
2021/05/23(日) 12:09:48.06ID:???
>>909
ファットコントローラーはダメという単純な話だよ
ダメじゃないケースはないから
0912nobodyさん
垢版 |
2021/05/23(日) 12:20:30.53ID:???
>>902
いや普通ミドルウェアとかトレイトに持たせるやろ
0913nobodyさん
垢版 |
2021/05/23(日) 12:23:28.95ID:???
>>911
コントローラーってRouteに対して固有の処理になるから固有の処理ならしゃーないけど
共通化できる処理ならできるだけ括り出して外に持たせるべきじゃない?
0914nobodyさん
垢版 |
2021/05/23(日) 12:24:04.93ID:???
>>912
ミドルウェアとかトレイトならファットになってもいいの?
0915nobodyさん
垢版 |
2021/05/23(日) 12:45:58.03ID:???
>>898
>>888で納得できない?もっと掘り下げて説明してほしいなら、どの辺が納得できないか教えてくれると助かる。
0916nobodyさん
垢版 |
2021/05/23(日) 12:51:10.79ID:???
コントローラーってのは処理の流れをコントロールするものなんだよ
データの加工みたいなゴチャゴチャした処理をする場所ではない
これだけのことなんだがわからんか?
0917nobodyさん
垢版 |
2021/05/23(日) 12:53:07.62ID:???
>>914
処理単位でそれぞれ分けるならファットにならないぞ
0918nobodyさん
垢版 |
2021/05/23(日) 12:55:09.82ID:???
>>909
ファットコントローラーはとにかくダメだって言ってる奴いるけど、そいつは無視して良い。

何故ダメかは>>888に詳しく書いたから読んでみてくれ。結局のところファットコントローラーてのは、単なる設計ミスの産物だからダメなのであって、もしコントローラーの責務に見合った処理を書いた結果、なおファットコントローラーになってるなら、別に問題無い。
0919nobodyさん
垢版 |
2021/05/23(日) 13:02:49.53ID:???
>>918
>>909はよくわかってるやつじゃん。釈迦に説法だった。
0920nobodyさん
垢版 |
2021/05/23(日) 14:30:37.79ID:???
馬鹿しか居ないのかなんなのか知らんけど、
『ファットコントローラー』っていうのは状態であって、手法じゃねぇの。

Controllerに書くべき物で溢れてるなら、いいんじゃねぇの?ファットでも。

問題なのは、本来はModelに書くべき処理を全部Controllerに書いている状態の事。
Railsとか使ってMVS分かった気になってるヴァカはModel=DBにアクセスする物…
みたいな腐った誤謬を持ってるけど、
本来ビジネスロジックを書く場所がModelなので、
それがControllerに書いてあったら、

おまえ、プギャー

なの。わかったか?ヴァカ共
0921nobodyさん
垢版 |
2021/05/23(日) 14:32:17.81ID:???
MV"S"ってなんだよ?タイプミスったわ。

よし、ここからSの定義が何なのか議論始めるぞ。
0922nobodyさん
垢版 |
2021/05/23(日) 14:36:58.35ID:???
てか、上で俺含めその説明してるでしょ。むしろ、理解してる奴の方が多いぐらいじゃね?
0923nobodyさん
垢版 |
2021/05/23(日) 15:01:34.70ID:???
Controllerに書くべき物がそんなに溢れることってある?
余程でかいシステム作ってるのか
0924nobodyさん
垢版 |
2021/05/23(日) 15:13:29.54ID:???
JavaのSpringFrameworkだと
Controller、Model、View、Repository、Serviceに分かれるな
0925nobodyさん
垢版 |
2021/05/23(日) 15:39:53.25ID:???
ModelにDaoとRepository両方書いてる奴は居そうだな
0926nobodyさん
垢版 |
2021/05/23(日) 15:44:33.81ID:???
お前らのソースコードってすごいカルボナーラになってそうだな
0927nobodyさん
垢版 |
2021/05/23(日) 15:44:53.51ID:???
すみませんスパゲッティの間違いです
0928nobodyさん
垢版 |
2021/05/23(日) 16:46:52.99ID:???
ああそうかDBアクセスのクエリとかModelに書いてしまえばコントローラーからはメソッド呼び出しだけで済むのか
0930nobodyさん
垢版 |
2021/05/23(日) 17:32:03.96ID:???
>>925
EloquentてORM使ってんのにDAOて単語が出てくる理由がサッパリなんだが説明してくれる?

その上でRepositoryてDDDのデータ操作レイヤーの話だと思うんだけど、お前はModelに書くことに否定的な立場なの?
上でも出てるローカルクエリスコープは、このデータ操作をビジネスロジックとして表現するための機能だから、俺の認識だとModelに書くのは至極当たり前に感じるんだが。
0931nobodyさん
垢版 |
2021/05/23(日) 17:36:55.59ID:???
公式ドキュメントでもクエリビルダのレクチャーはコントローラー内に書いてあるがな
0932nobodyさん
垢版 |
2021/05/23(日) 17:43:16.84ID:???
DaoもDtoもEntityもRepositoryも全部Modelの役目だよ
0933nobodyさん
垢版 |
2021/05/23(日) 17:48:08.70ID:???
>>931
Eloquentとクエリビルダの違い理解してない人?
0934nobodyさん
垢版 |
2021/05/23(日) 17:48:09.68ID:Eo1yN90s
この馬鹿は一体何を言い出したのだ、お前たちよ。

932nobodyさん2021/05/23(日) 17:43:16.84ID:???
DaoもDtoもEntityもRepositoryも全部Modelの役目だよ
0936nobodyさん
垢版 |
2021/05/23(日) 17:58:56.65ID:???
>>932本人じゃないからわからんけど、 MVCを前提にした場合、controllerの役割とviewの役割は具体的に明示されているから、それ以外の全てがmodelにぶち込まれるってことを表現してるんじゃないか?

だから馬鹿とは思わなかったけどな。逆になぜ馬鹿と言い切れるのかその根拠を知りたい。
0937nobodyさん
垢版 |
2021/05/23(日) 18:01:50.48ID:???
他のテーブルとのjoin操作までModelに入れるのはなんか違う気がするんだけどその辺どうしてるの?
0939nobodyさん
垢版 |
2021/05/23(日) 18:03:38.49ID:Eo1yN90s
>>937

人の話聞いてんのかな? ModelはDBにアクセスする物じゃねぇんだから、
Modelとテーブルが1対1なわけねーーーーーーーだらーーーーーーーーーー!
937nobodyさん2021/05/23(日) 18:01:50.48ID:???
他のテーブルとのjoin操作までModelに入れるのはなんか違う気がするんだけどその辺どうしてるの?
0940nobodyさん
垢版 |
2021/05/23(日) 18:05:26.58ID:???
>>937
そもそもEloquent使ってたらjoinなんて使わないでしょ。クエリビルダ使いたいなら、DBファサードになるからmodelは呼び出されず、必然controllerで書くだろうさ。それが嫌なら層を増やすべきだけど、MVC話の文脈とズレていくだろうからそこはスルー。
0941nobodyさん
垢版 |
2021/05/23(日) 18:07:57.89ID:???
>>939
お前、Laravelまともに使ったことないでしょ。EloquentModelの特殊性を全く理解できてないように見える。もしかしてアンチサロゲートキーおじさん?
0942nobodyさん
垢版 |
2021/05/23(日) 18:10:08.28ID:???
>>933
ラッピングされてるだけで一緒のものやぞ
$any_table = AnyTable::where(...)->where(...)->where(...)->select(...)->oderBy(...)->get();
$any_table = DB::('any_tables')->where(...)->where(...)->where(...)->select(...)->oderBy(...)->get();
0943nobodyさん
垢版 |
2021/05/23(日) 18:10:56.22ID:???
EloquentModelつーかActiveRecordて概念を全く理解していないというのが正解か。
0944nobodyさん
垢版 |
2021/05/23(日) 18:15:32.71ID:???
>>942
ラッピングしているというのはそうだけど、それ以外は全然違う。まずクエリビルダはModelを介さないのでデータ操作を隠蔽できずcontrollerに操作を書くことになる。さらに結果はmodelへのhydrateの工程がないためDBから受け取ったデータは標準クラスになる。当然castできないから、ぜんぶstring型という悲劇。
0945nobodyさん
垢版 |
2021/05/23(日) 19:44:02.48ID:???
別にControllerにDB処理書いてもいいと思うけどな
Laravelのドキュメントも思いっきり書いてるし
0946nobodyさん
垢版 |
2021/05/23(日) 19:52:06.02ID:???
>>945
まあ大多数の人はそうしてると思うけどね
ただモデル側に書いた方がシンプルなコードにできるってだけでそれでマウント取るのはホント意味わからん
0947nobodyさん
垢版 |
2021/05/23(日) 21:20:12.23ID:???
LaravelどころかMVCを全く理解してない奴がゴロゴロいるんかこのスレ
だめだこりゃ
0949nobodyさん
垢版 |
2021/05/23(日) 21:34:35.13ID:???
MVC理解していないのってお前らの大半やろ
Modelに関する処理をModelに置けば
Controllerは何やっても問題無いやろ
それを何の根拠も無くファットコントローラーwとか言っているのだからw
それ外に追い出したらコントローラーの記述が減ってるだけやろw
0950nobodyさん
垢版 |
2021/05/23(日) 21:36:19.67ID:???
ところでお前らLivewireかinertia使ってる?
0951nobodyさん
垢版 |
2021/05/23(日) 21:59:20.56ID:???
Livewireなら使ってる
0952nobodyさん
垢版 |
2021/05/23(日) 22:01:03.36ID:???
>>949
落ち着け。それでログ読め。ファットコントローラーを頭ごなしに否定しているのは1人だけだぞ。
0953nobodyさん
垢版 |
2021/05/23(日) 22:05:03.30ID:???
Webサービスでの画面遷移について質問があります。


画面A →(POST)→ 画面B →(POST)→ 画面C

と、遷移させたいとします。

で、画面Cで受信したPOSTデータにエラーがあったら画面Bに戻りたい。
このとき画面Bでは、画面Aから先にPOSTされたデータと、画面Bで先に入力した値を再表示させたい。

そこで質問ですが、

・画面Bや画面Cでは、受信したPOSTデータをセッションに保存するように作るのでしょうか?
・画面Cから画面Bに戻るには、redirect()を使うべきか、それとも $this->画面Bのメソッド(); を呼ぶのがいいのでしょうか?

教えてください。
お願いします。
0954nobodyさん
垢版 |
2021/05/24(月) 00:47:22.76ID:???
そういう場合は、画面Bから画面CにPOSTするんじゃなくて、
画面Bから画面BにPOSTして、エラーが無かったら画面Cにリダイレクト
0955nobodyさん
垢版 |
2021/05/24(月) 07:06:53.59ID:???
>>952
ファットコントローラー否定派は俺以外に少なくとも1人いる。

MVCはMがアプリケーションでVとCは単なるUIなんだよ。Mにビジネスロジックは全部書く。UIがWebだろうがコマンドラインだろうが独立して動けるようにMを書く。
なのでバリデーションやDBアクセスはMに書くべきで、Cには認証やらGET/POSTの処理やらクッキーアクセスetcを書く。
それが本来のMVCだが、Laravelのドキュメントが違ってるなら、厳密なMVCを目指してはいないのだろう。別にMVCだけが正解なわけでもないから。
0956nobodyさん
垢版 |
2021/05/24(月) 08:48:15.94ID:???
まー、955が正解だわな。

949みたいなオレオレMVC論を唱える奴がいるところが、ららべらーの次元の低さを如実に表してるな。
0957nobodyさん
垢版 |
2021/05/24(月) 08:54:31.51ID:???
>>955
いや、「頭ごなし」に否定してる人はってことね。MVCちゃんと理解して設計してねって話をしてる人が大半だと思ってて、ファットコントローラーはその設計に失敗した結果だからダメって言ってると思うんだよね。

俺が書いたのは>>888>>918ね。
0958nobodyさん
垢版 |
2021/05/24(月) 08:56:43.51ID:???
バリデーションがMって違和感があるんだけどそんなもん?
0959nobodyさん
垢版 |
2021/05/24(月) 09:03:21.36ID:???
>>958
LaravelはControllerかその手前のFormRequest、 RailsやCakePHPはModelでやってた気がする。
0960nobodyさん
垢版 |
2021/05/24(月) 09:12:02.22ID:???
俺はCakeを触ってたからバリデーションをControllerでやってるLaravelのドキュメントに違和感ある
0961nobodyさん
垢版 |
2021/05/24(月) 09:14:49.93ID:???
>>957
MVCちゃんと理解して設計したら、ファットコントローラーにはならないというのがMVCの思想なんだけど、違うか?
0962nobodyさん
垢版 |
2021/05/24(月) 09:26:37.00ID:???
>>961
そんなことはMVCのオリジナルの論文には書かれてなかったと思う。

元々は、ユーザーのメンタルモデルに沿った形でアプリケーションを再利用しやすいよう分割しようってだけの話だったかと。一体何を読んでその理解に至ったんだ・・・。

↓オリジナル
https://www.semanticscholar.org/paper/The-Model-View-Controller-(MVC)-Its-Past-and-Reenskaug/ff2ada602c96499c0f8a634e26c2c58ef8ec490f
0963nobodyさん
垢版 |
2021/05/24(月) 09:33:48.05ID:???
>>962
何を読んでって、Skinny Controller, Fat Modelってあちこちで言われてきたじゃん
と思ったらこれってRailsの話で結構古い記事なんだな、今の人は知らん&また違うのかも知れんな
0965nobodyさん
垢版 |
2021/05/24(月) 10:08:51.77ID:???
>>962
オリジナルって何だ?MVCの概念自体は1970年代からあるものでその論文?はそれを研究してまとめたものじゃないの?
コンピューターサイエンスにおけるMVCにファットコントローラーの話は出て来ないかも知れないが、
ここではWebフレームワークにおけるMVCの話をしてるんだと思う
0966nobodyさん
垢版 |
2021/05/24(月) 10:18:21.57ID:???
捨て垢でもいいのでQiitaに持論をまとめてほしいです
0967nobodyさん
垢版 |
2021/05/24(月) 10:29:44.68ID:???
Skinny Controller, Fat Modelでぐぐるとキータすぐ出てくるやん
今まで散々議論されてる話題だし
レス数が950を超えています。1000を超えると書き込みができなくなります。