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/
0851nobodyさん
垢版 |
2021/05/21(金) 17:10:18.19ID:???
>>848
書かなくて良い。でもそんなシステム触りたくないわ。バッチなら良いけど。
0852nobodyさん
垢版 |
2021/05/21(金) 17:46:28.62ID:???
>>842
それ大丈夫なの?
依頼があって見てるわけじゃなくて自ら勝手に見てるんでしょ?
0853nobodyさん
垢版 |
2021/05/21(金) 17:54:18.00ID:???
まさかここに犯罪者がいるとは。。。
0854nobodyさん
垢版 |
2021/05/21(金) 20:03:52.18ID:???
>>842
それ許可なくログインはアウトだろ・・・・
0855nobodyさん
垢版 |
2021/05/21(金) 20:17:07.10ID:???
保守の為ならわりと普通に管理画面任せられるけどな
0856nobodyさん
垢版 |
2021/05/21(金) 22:12:15.25ID:???
> Test::getSomething(可変)
> みたいにした方がスッキリするんちゃう

やってる事が昭和だな。
0857nobodyさん
垢版 |
2021/05/21(金) 22:21:01.07ID:???
>>856
どうゆうこと?>>850はローカルクエリスコープの話してるんだなって思って読んでたけど。
0858nobodyさん
垢版 |
2021/05/21(金) 22:30:56.55ID:QA5yqn/V
すいません。>>737 の質問をした者です。
自己解決できたので一応。

Route::get('/', function () {
return view('welcome');
});

の「'/'」の部分を、サーバーのルートからのファイルパスだと
間違って認識していたのが原因だったみたいです。

htdocsと同階層にLaravelをインストールして、
/htdocs/public/index.phpでパスだけ変更、
サーバーのルートを/htdocs/publicに設定することで
あとはルーティングでどうにでもできそうです。

>>746
で仰ってた意味がやっと分かりました。

色々すみませんでした。
0859nobodyさん
垢版 |
2021/05/21(金) 22:47:55.77ID:???
>>857
いやスコープならscopeから始まる名称じゃないと駄目じゃない?
getから始まってるってことは昭和な書き方だよ
0860nobodyさん
垢版 |
2021/05/21(金) 23:00:40.40ID:???
      ↑ こいつ、何言ってんだ?
0861nobodyさん
垢版 |
2021/05/21(金) 23:02:09.43ID:???
いつもの嵐だろ
スルー
0862nobodyさん
垢版 |
2021/05/21(金) 23:09:25.68ID:???
確かにローカルスコープを使うにはscopeから始まる名前にしなさいと
Laravelのドキュメントには書いてあるけど 実際はscopeから始まらなくても使えるんだよ
0863nobodyさん
垢版 |
2021/05/22(土) 02:53:55.33ID:???
前スレのこういうレスがあったので
パフォーマンスを重視するならクエリビルダを使うってことでモデル不要なのかなと思いました

35 名前:nobodyさん [sage]: 2021/02/27(土) 09:16:39.22 ID:???
リレーションシップで取得可能かつクエリもパフォーマンスに影響が出ないものならeloquent。それ以外はクエリビルダ。
0864nobodyさん
垢版 |
2021/05/22(土) 05:54:22.57ID:???
scopeの件理解した、なるほどそういうのがあるのか
でもやりたいことは単にgetという想定なのでメソッドはgetでいいと思う
0865nobodyさん
垢版 |
2021/05/22(土) 06:51:31.72ID:???
>>859
いやいや、そりゃモデル内で定義するときはscopeGetSomething()だけど、
呼び出すときはTest::getSomething()でしょ。

ただ命名のことを問題にしてるってことは理解した。

それについてはget()まで含むクエリスコープなら、getから始まる名前つけるのは悪くないと思った。
0866nobodyさん
垢版 |
2021/05/22(土) 06:57:23.47ID:???
>>863
それ書いたの俺だけど、意図としては原則Eloquent使って、例えば数万件のデータをバッチでfetchするときはクエリビルダ使うってこと。

詳細画面や一覧画面とか表示する分には、クエリビルダのほうが速いって言っても誤差の範囲だから使う理由はない。
0867nobodyさん
垢版 |
2021/05/22(土) 08:58:31.98ID:???
故人的にはgetSomethingよりもfindSomethingのほうが好きだな
Test::getSomething()->get()
Test::findSomething()->get()
となるかの違いでしかないけど
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なら使ってる
レス数が950を超えています。1000を超えると書き込みができなくなります。

ニューススポーツなんでも実況