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

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

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

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

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

1回答

2718閲覧

【CakePHP 3.0】ログインユーザーのみの記事投稿を表示させたい

DaisukeMori

総合スコア225

PHP

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

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2018/05/05 07:19

編集2018/05/05 07:34

【前提条件(環境)】
CakePHP 3.0

【現状(今できていること)】
現在SNSの仕組みをCakePHPで構築中でございます。
できていることとして、ログインしたユーザーで記事を投稿し、
その記事を表示させる仕組みは作れました。
ただ別のユーザーでログインしてそのユーザーでも記事は投稿できるのですが、
全ての投稿を表示させることまでしか、どうしてもできません。

【要件(したいこと)】
SNSの個人ページみたいに、ログインユーザーのみの記事だけを表示させたい。
どうやって判定させて実現させていくのかの糸口がつかめず、停滞中で困っております。
誰か詳しい方ご教授いただけないでしょうか?

参考までにビューとコントローラーのコード載せておきます。
イメージ説明

html

1ビュー 2src/Template/Contents/index.ctp 3 4<?php 5// ログイン認証判定 6$user_login_id = $this->request->session()->read('Auth.User.id'); 7?> 8<div class="UsersForm"> 9 <div class="form"> 10 <?= $this->Form->create($data,['type'=>'post','url'=>['action'=>'add','type'=>'file']]) ?> 11 <legend>今なにしてる?</legend> 12 <?= $this->Form->hidden('Contents.user_id',['type'=>'text','value'=>$user_login_id]);?> 13 14 <?= $this->Form->input('Contents.title',['type' => 'text','placeholder'=>'20文字以内でタイトルを入れてね','label' => '']) ?> 15 <?= $this->Form->input( 'Contents.body', ['type' => 'textarea','cols' => 10,'rows' => 7,'placeholder'=>'140文字以内でコメントしてね','label' => '' ] ); ?> 16 <?= $this->Form->button('投稿する'); ?> 17 <?= $this->Form->end() ?> 18 </div> 19 20 <div class="content"> 21 <?php foreach($data as $obj): ?> 22 <div class="post"> 23 <div class="post_name"><?= h($obj['user']['username']) ?>さんから投稿</div> 24 <div class="post_title"><?= h($obj->id) ?> : <?= h($obj->title) ?></div> 25 <div class="post_body"><?= h($obj->body) ?></div> 26 <?= $this->Form->create(null,['type'=>'post','url'=>['action'=>'delRecord']]) ?> 27 <?= $this->Form->hidden('id',['type' => 'text','placeholder'=>'削除した記事のIDを入力','label' => '','value'=>h($obj->id)]) ?> 28 <?= $this->Form->submit('削除') ?> 29 <?= $this->Form->end() ?> 30 </div> 31 <?php endforeach; ?> 32 </div> 33 34 <div class="paginator"> 35 <ul class="pagination"> 36 <?= $this->Paginator->numbers([ 37 'before'=>$this->Paginator->first('< 最初').' ', 38 'after'=>' '.$this->Paginator->last('> 最後'), 39 'modulus'=>9, 40 'separator'=>'・' 41 ]) ?> 42 </ul> 43 </div> 44</div>

php

1コントローラー 2src/Controller/ContentsController.php 3 4<?php 5namespace App\Controller; 6 7use App\Controller\AppController; 8use Cake\Event\Event; 9use Cake\Filesystem\Folder; 10use Cake\Filesystem\File; 11use RuntimeException; 12use Cake\ORM\TableRegistry; 13use \Exception; 14use Cake\Log\Log; 15 16class ContentsController extends AppController{ 17 18 private $users; 19 public $paginate = [ 20 'limit' => 5, 21 'order' => [ 22 'id'=> 'DESC' 23 ], 24 'contain' => ['Users'] 25 ]; 26 27 public function initialize(){ 28 parent::initialize(); 29 $this->users = TableRegistry::get('Users'); 30 $this->set('header','User/header'); 31 $this->set('footer','User/footer'); 32 $this->viewBuilder()->autoLayout(true); 33 $this->viewBuilder()->Layout('content'); 34 } 35 36 public function index(){ 37 $data = $this->paginate($this->Contents); 38 $this->set('data',$data); 39 $this->set('count',$data->count()); 40 } 41 42 public function add(){ 43 44 $content = $this->Contents->newEntity(); 45 if ($this->request->isPost()) { 46 $PostData = $this->request->data(); 47 $content = $this->Contents->patchEntity($content, $PostData); 48 if ($this->Contents->save($content)) { 49 return $this->redirect(['action' => 'index']); 50 }else{ 51 return $this->redirect(['action' => 'index']); 52 } 53 } 54 } 55 56 public function delRecord(){ 57 if($this->request->isPost()){ 58 try{ 59 $entity = $this->Contents->get($this->request->data['id']); 60 $this->Contents->delete($entity); 61 }catch(Exception $e){ 62 Log::write('debug',$e->getMessage()); 63 } 64 } 65 66 $this->redirect(['action' => 'index']); 67 } 68 69 // アクセス権限 70 public function isAuthorized($user = null){ 71 $action = $this->request->params['action']; 72 73 if(in_array($action,['index','view'])){ 74 return true; 75 } 76 if($user['role'] === 'admin'){ 77 return true; 78 } 79 if($user['role'] === 'author'){ 80 return true; 81 } 82 } 83 84} 85 86?>

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

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

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

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

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

guest

回答1

0

ベストアンサー

現在ログインしているユーザが投稿した記事のみを表示ですよね。

DBから記事を取得するときにログインユーザの記事に絞れば良いと思います。

クエリはこのようになると思います。

$query = $this->Contents ->find() ->contain('Users') ->where(['Users.id' => $this->Auth->user('id')]); $this->paginate($query);

参考
https://book.cakephp.org/3.0/ja/controllers/components/authentication.html#id20

https://book.cakephp.org/3.0/ja/controllers/components/pagination.html#controller-paginate

投稿2018/05/07 05:44

編集2018/05/07 05:57
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

DaisukeMori

2018/05/07 12:00

ご回答ありがとうございました。 一度、試作してみます。
DaisukeMori

2018/05/07 12:36

先ほど試してみまして、この方法でログインユーザーのみの記事表示に成功しました。 無事この要件は達成できました。 この度はご丁寧にありがとうございました。
DaisukeMori

2018/05/07 12:42

【追記】 ビューに$dataでsetしていたので、以下のように書き換えさせていただきました。 $this->paginate($query);       ↓ $data = $this->paginate($query); // 記事情報を$dataに代入 $this->set('data',$data); // それをビューにセット
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問