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

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

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

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

PHP

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

2回答

564閲覧

Laravelを使ったMVCの書き方について

yukiusagi

総合スコア22

Laravel

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

PHP

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

2クリップ

投稿2017/09/14 14:15

編集2017/09/14 14:21

###前提
クライアント側はUnity、サーバ側はPHP(Laravel)を使ってアプリを開発しています。

###発生している問題
1.UnityからRequestがコントローラーAに渡ってくる。
2.モデルαを使ってαテーブルから必要レコードを取得。
3.モデルβを使ってβテーブルから必要レコードを取得。
4.2と3で取得したデータを使って、足したり引いたりかけたり等などの処理をし、結果となる値を作り出す
5.結果をUnityへjsonで送る(または結果をテーブルへInsertする)

上記のような処理の場合、1~5の内容はすべてコントローラーに記載するのが最適でしょうか。
複数のテーブルデータを取得したり、自分が書いた結果を出すためのロジックが複雑になってくると、コントローラーが肥大化していっています。

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

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

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

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

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

guest

回答2

0

ベストアンサー

普段私がやるときは、Controller,Service,Repository,Model(DataAccess)のような区切り方をしますね。
2と3はモデルに処理を書いておいて、Repositoryがそれを呼び出すようにします。
ServiceからRepositoryのメソッドを呼び出し、それを処理した上でControllerに返します。
ControllerはRequestのバリデーション、Serviceへの情報の受け渡し、その結果を返すといった役割をもたせます。(正直ここは全部渡してそれを貰うだけみたいにしたほうが良いでしょう)

Laravel5.5で、Responsableインターフェースが実装されたので
Serviceクラスで整形などはあまりせずにResponsableインターフェースを実装したクラスにデータを渡してあとはResponsableがいい感じにレスポンスを返すみたいな形が良いのかなと思います。

簡単な処理であれば https://thibaud.dauce.fr/posts/2017-07-26-improvements-of-the-new-Responsable-interface-in-Laravel.html のような感じでもいい感じがします。

投稿2017/09/14 15:00

fagai

総合スコア2158

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

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

yukiusagi

2017/09/15 13:17

返信ありがとうございます。 まだ未知のものが多すぎて何から学んでいけばいいのやら状態ではありますが、1つずつ理解し精進していきたいと思います ご教示いただきありがとうございました。助かりました。
guest

0

小規模や作り捨てではコントローラに全て書いても支障は無いかと思いますが、それぞれの概念を切り分けた方が当然管理しやすいので、リポジトリパターン等を採用したりするとよりプログラムの見通しやテストがやりやすくなるかとおもいます。
Laravel リポジトリパターンの実装
レイヤードアーキテクチャを意識したPHPアプリケーションの構築

多人数開発等で設計やプロジェクトがしっかりした手間をかけられるのであれば、DDDパターンと言うのもあります。

2017/03 版 DDDパターンを活用した Laravelアプリケーション開発/201703-ddd-with-laravel

参考にLaravel製のOSSです。
phanan/koel
Vuedo/vuedo
invoiceninja/invoiceninja
octobercms/october

Laravel4ですが、Laravel作者のTaylorさんの本の日本語訳もあるので作り方や考え方の参考になるかとおもいます。
Laravel: From Apprentice To Artisan 日本語版

それぞれの役割を持って層をわけていく場合は、命名や構造、規則性をしっかり意味付けないと逆にわかりにくくなる恐れもあるので、ひとまずコントローラではvalueヘルパー等でクロージャでデータ取得操作をまとめるようにしておいて、後で自分に合いそうなパターンをいくつか試してリファクタリングするのもありかとおもいます。
基本的には、fagaiさんの回答の構築パターンがWebアプリケーションでは安定して使われているかとおもいます。

$data = value(function(){ return Model::where("xxx","yyy")->get(); });

投稿2017/09/14 14:39

編集2017/09/14 16:18
aro10

総合スコア4106

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

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

yukiusagi

2017/09/15 13:17

返信ありがとうございます。 まだ未知のものが多すぎて何から学んでいけばいいのやら状態ではありますが、1つずつ理解し精進していきたいと思います ご教示いただきありがとうございました。助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問