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

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

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

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

Laravel 5

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

Q&A

解決済

3回答

1967閲覧

LaravelのViewのユーザーによる内容の出し分けについて

php_practitione

総合スコア12

PHP

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

Laravel 5

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

1グッド

1クリップ

投稿2020/03/12 13:00

編集2020/03/12 13:01

ユーザーがプロジェクトを作成でき、それに他のユーザーがコメントできるようなサイトを想定しており、
同じview(project/detail.blade.php)で表示項目が3種類くらいパターンがあり悩んでおります。

状況

特定のプロジェクトページ(project/xxxxxxx)をそれぞれのユーザーが見たときに、
ログイン済ユーザーAにはprojectでコメントしてないのでコメントフォームが見えている。
ログイン済ユーザーBにはprojectでコメント済なのでフォームではなく自分のコメントが見えている。
ログイン済ユーザーC(プロジェクトオーナー)は、オーナーなのでフォームではなく、参加者一覧とコメント一覧が見えている。

質問

このような表示パターンが複数存在する場合はどのようにcontrollerを組み立てviewで分岐させればいいんでしょうか?

悩んでいるポイント

  1. ProjectControllerを処理を分けたほうがいいのか、どう分けるのか

理由:関係のないsqlを発行するのが無駄そう

  1. 表示させるview自体を分けたほうがいいのか

理由:1つのviewで色々やろうとして見にくくなりそう?

class Project extends Controller { public function detail($id){ #プロジェクトの詳細を取ってくるEloquentで、projectやリレーションでcommentsも取ってくる。 #参加者一覧を取ってくるEloquent #$idとAuthのidから自分のコメント取得するEloquent } } Project/detail.blade.php #共通の表示 #if オーナーなら 参加者一覧表示 コメント一覧表示 # if 自分のコメントないなら コメントフォーム出す # else 自分のコメント表示

以前にDBについても質問させていただいた関連になります。
https://teratail.com/questions/245052

s.k👍を押しています

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

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

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

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

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

guest

回答3

0

あくまで表示の問題なのでVIEW側に必要な情報渡して分岐させるべきと思います。
可読性を気にするのであれば、それぞれの権限で表示する要素をブロック化して、
メインのVIEWは分岐とそれで必要となるブロックのincludeだけ書くと良いと思います。

投稿2020/03/12 13:03

m.ts10806

総合スコア80854

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

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

php_practitione

2020/03/12 13:14

>あくまで表示の問題なのでVIEW側に必要な情報渡して分岐させるべきと思います。 わかりました! contollerでifで分けるとかもしつつ、必要そうなものはview側に渡そうと思います! > include bladeのincludeを知らなかったので参考になりました。
guest

0

ベストアンサー

ログイン済ユーザーごとにさらに細かい権限のようなことをするのは「認可」
https://readouble.com/laravel/6.x/ja/authorization.html

ProjectPolicyを作って「コメント一覧を表示できる」とかのメソッドを作る。

viewでは

@can('showComments', $project) @foreach($project->comments() as $comment) @endforeach @endcan

別に認可使わなくても@if()で書いても実現できるけどviewが複雑になるのでPolicy classに分ける。
こういう権限の判定は他の場所でも使う。
コントローラーの段階で判定して無駄な処理を減らしてもいいし使い方は色々。

php

1if($request->user()->can('myComment', $project)) { 2 3}

投稿2020/03/12 14:41

kawax

総合スコア10377

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

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

php_practitione

2020/03/13 03:59

ご回答ありがとうございます。 gateとpolicyとても使えそうです。 https://reffect.co.jp/laravel/laravel-gate-policy-understand 単純なhtmlの出しわけ、名前に性別で「くん」か「ちゃん」をつけるような処理はifでやって、 権限的なもの、ある状態での出しわけなどはこれでやろうと思います。 gateの粒度がどれくらいで切ればいいかまだわかっていませんが、やってみようと思います!
guest

0

testtesttest

投稿2020/03/12 13:02

tri_se28

総合スコア16

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問