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

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

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

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

CakePHP

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

Q&A

1回答

405閲覧

cakePHPでセーブした内容をリダイレクト先で使いたい。

tsubasa-1342

総合スコア6

PHP

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

CakePHP

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

0グッド

1クリップ

投稿2018/08/31 08:48

cakePHPでsaveした内容をリダイレクト先で使いたい。

cakePHPでユーザー登録機能をつくっています。登録画面(register.ctp)でフォームに入力した内容をバリデ―ションにかけ、セーブした後リダイレクト先の登録完了画面(top.ctp)で登録画面のフォームに入力した内容を用いてメッセージを表示したいのですがうまくいきません。以下コードと問題点です。

該当のソースコード

register.ctp

php

1<div class="form-container"> 2 <?= $this->Form->create($user); ?> 3 <?= $this->Form->control('name', ['required' => false, 'label'=>'名前', 'id'=>'name_check', 'class'=>'register_form']); ?> 4 <?= $this->Form->control('user_name', ['required' => false, 'label'=>'ユーザー名','id'=>'user_name_check', 'class'=>'register_form']); ?> 5 <?= $this->Form->control('password', ['required' => false, 'label'=>'パスワード','id'=>'password_check', 'class'=>'register_form']); ?> 6 <?= $this->Form->control('password_confirm', ['required' => false, 'label'=>'パスワード(確認)', 'id'=>'password_confirm_check', 'class'=>'register_form', 'type'=>'password']); ?> 7 <?= $this->Form->control('email_adress', ['required' => false, 'label'=>'メールアドレス','id'=>'email_adress_check', 'class'=>'register_form']); ?> 8 <div class="checkbox-container"> 9 <?= $this->Form->checkbox('notpublish', ['value'=>'notpublish']); ?> 10 <div class="checkbox-message"> 11 つぶやきを非公開にする 12 </div> 13 </div> 14 <?= $this->Form->button('アカウントを作成する'); ?> 15 <?= $this->Form->end(); ?> 16</div>

top.ctp

php

1<?php 2$this->assign('title', 'ユーザー登録完了'); 3?> 4<div class="top-container"> 5 <h1>参加しました。</h1> 6 <p><?= h($user_name); ?>さんは参加されました。</p> 7 <p>メッセ―ジ</p> 8 <div class="top-container-link"> 9 <?= $this->Html->link('twitterにログイン', ['controller'=>'Users', 'action'=>'login']); ?> 10 </div> 11 12</div>

UsersController.php

php

1 public function register() { 2 $user = $this->Users->newEntity(); 3 if ($this->request->is('post')) { 4 $user = $this->Users->patchEntity($user, $this->request->data); 5 if ($this->Users->save($user)) { 6 return $this->redirect(['action'=>'top']); 7 } else { 8 /// 9 } 10 } 11 $this->set(compact('user')); 12 } 13 14 public function top() { 15 16 }

top.ctpのh($user_name)のところにregister.ctpのuser_nameのフォームに入力された文字列を表示したいのですがうまくいきません。

試したこと

register.ctpのformでaction=>top.ctpとするとバリデ―ションが適用されずtop.ctpに直接とんでしまいます。

補足情報

PHP5.6
cakePHP3.6

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

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

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

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

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

guest

回答1

0

registerとtopは別のリクエストなので、変数の値を共有することはできません。
registerでtopにリダイレクトする前にユーザ名をセッションに保存しておいたらどうでしょうか

public function register() { $user = $this->Users->newEntity(); if ($this->request->is('post')) { $user = $this->Users->patchEntity($user, $this->request->data); if ($this->Users->save($user)) { $session = $this->getRequest()->getSession(); $session->write('user_name', $user->user_name); return $this->redirect(['action'=>'top']); } else { /// } } $this->set(compact('user')); } public function top() { $session = $this->getRequest()->getSession(); $user_name = $session->read('user_name'); $this->set('user_name', $user_name); }

なお、セッションがない状態でtopにアクセスされた場合に表示がおかしくなるかもしれないです...

投稿2018/09/02 09:01

popobot

総合スコア6586

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問