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

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

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

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

Q&A

0回答

1567閲覧

cakephp3でログインが持続されない

JunZenpou

総合スコア24

CakePHP

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

0グッド

1クリップ

投稿2017/05/03 03:51

編集2017/05/06 08:04

###前提・実現したいこと
cakephp3でtwitterみたいなものを作っています。
ログイン認証後、ツイートや友達検索などができるようにしています。友達検索で、formで入力した名前で他のユーザーを検索できるようにしています。ここで、友達を検索してから、他のページに移動すると、すぐにログアウトしてしまいます。友達検索で、paginateを使用して、次のページにもpaginateが反映されるようにセッションを使っているのですが、ここでのセッションのデリートがログアウトの原因になっているのかなと思っているのですが、どうでしょうか。宜しくお願いします。

###該当のソースコード

PostsController.php

1<?php 2 3namespace App\Controller; 4 5use Cake\ORM\TableRegistry; 6 7class PostsController extends AppController { 8 9 public $paginate = [ 10 ['User' => [ 11 'page' => 1, 12 'limit' => 10, 13 'sortWhiteList' => 'created', 14 'order' => 'desc', 15 'contain' => ['Posts'] 16 ]], 17 ['Post' => [ 18 'page' => 1, 19 'limit' => 10, 20 'sortWhiteList' => 'created', 21 'order' => 'desc' 22 ]] 23 ]; 24 25 26 public function initialize(){ 27 parent::initialize(); 28 // ページネーションのロード 29 $this->loadComponent('Paginator'); 30 // モデルの組み込み 31 $this->Users = TableRegistry::get('Users'); 32 $this->posts = TableRegistry::get('Posts'); 33 $this->Follows = TableRegistry::get('Follows'); 34 } 35 36 // アクセスの権限処理 37 public function isAuthorized($user = null){ 38 $this->set('user',$user); 39 return true; 40 } 41 42 43 public function index(){ 44 $this->set('user',$this->Auth->user()); 45 $this->set('entity',$this->Posts->newEntity()); 46 $data = $this->Posts->find('all')->contain(['Users']); 47 $this->set('data',$data); 48 } 49 50 public function addRecord(){ 51 if($this->request->is('post')){ 52 $tweet = $this->Posts->newEntity($this->request->data); 53 $this->Posts->save($tweet); 54 } 55 return $this->redirect(['action'=>'index']); 56 } 57 58 59 60 public function mypage(){ 61 $this->set('user',$this->Auth->user()); 62 } 63 64 65 public function search($page = null,$sort = null, $direction = null){ 66 $this->set('user',$this->Auth->user()); 67 $this->set('entity',$this->Posts->newEntity()); 68 69 // 検索ボタンを押した時 70 if(!empty($this->request->data)){ 71 // フォームの値を取得 72 $content = $this->request->data['Post']['username']; 73 // 検索条件 74 $conditions = $this->Users->find() 75 ->where(['username like'=>'%'.$this->request->data['Post']['username'].'%']) 76 ->orWhere(['name like'=>'%'.$this->request->data['Post']['username'].'%']) 77 ->contain(['Posts']); 78 79 80 // 古いセッションを削除 81 if($this->Session->check('conditions')) 82 $this->Session->delete('conditions'); 83 84 if($this->Session->check('content')) 85 $this->Session->delete('content'); 86 87 // 新しいセッションの書き込み 88 $this->Session->write('conditions',$conditions); 89 $this->Session->write('content',$content); 90 91 // viewに渡す 92 $data = $this->paginate($conditions); 93 $this->set('data',$data); 94 }else { 95 if($this->Session->check('conditions')){ 96 // パラメータが無ければ新しくページに来た 97 if(!empty($this->request->query['page']) && empty($this->request->query['sort']) && empty($this->request->query['direction'])){ 98 99 $this->Session->delete('conditions'); 100 $this->Session->delete('content'); 101 }else { 102 // ページ移動の処理 103 $conditions = $this->Session->read('conditions'); 104 $content = $this->Session->read('content'); 105 106 $data = $this->paginate($conditions); 107 $this->data('data',$data); 108 $this->set('content',$content); 109 } 110 } 111 } 112 } 113 114} 115 116

search.ctp

1 2<h1>友達検索</h1> 3 4<?php 5 echo "ユーザー: {$user['name']}さん<br/>"; 6 echo "<br/>"; 7 echo "誰を検索しますか?"; 8 9 if(!empty($content)){ 10 $name = $content; 11 } else { 12 $name = ""; 13 } 14 15 echo $this->Form->create($entity,['url'=>['action'=>'search']]); 16 echo $this->Form->input('Post.username',['label'=>'名前: ','placeholder'=>'名前またはユーザー名','default' => $name]); 17 echo $this->Form->submit('検索'); 18 echo $this->Form->end(); 19 echo "<br/><hr></br/>"; 20 21 if($data){ 22 echo "<pre>"; 23 // print_r($data); 24 $dasa = $data->toArray(); 25 print_r($dasa); 26 echo "</pre>"; 27} 28 29echo "<br/><br/>"; 30echo $this->Paginator->prev('<<前へ'); 31echo $this->Paginator->next('>>次へ'); 32 33 34 ?> 35

###試したこと

###補足情報(言語/FW/ツール等のバージョンなど)
一応、AppControllerのinitializeで$this->Session = $this->request->session()としています。また、Users hasMany Postsです。

エラーとして
Fatal error: Uncaught PDOException: You cannot serialize or unserialize PDO instances in [no active file] on line 0

PDOException: You cannot serialize or unserialize PDO instances in [no active file] on line 0
上記の二つが出てるんですが、これはどういう意味でしょうか。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問