Blogチュートリアルにおけるリダイレクト処理
CakePHPブログチュートリアルを元に実装してみたのですが、追加・編集・削除の後にリダイレクト処理を入れているのですが、画面が白いままで例えば以下のURLからindexへ遷移してくれません。http://localhost/cake/posts/add
indexの画面に戻って更新をかけるとデータが追加されているのでそこら辺の処理は大丈夫だと思うのですが、何が原因だと思われるでしょうか?
後、追加作業が成功した際のメッセージも表示されない状況です。
環境は以下の環境で行いました。
- Mac
- MAMP
- MySQL
- CakePHP(Ver.2.6.4)
以下に念の為PostsConroller.phpのソースを載せておきます。
<?php
//File: /app/Controller/PostsController.php
class PostsController extends AppController {
public $helpers = array('Html', 'Form', 'Session');
public $components = array('Session');
public function index() {
$this->set('posts', $this->Post->find('all'));
}
public function view($id = null) {
if(!$id) {
throw new NotFoundException(__('Invalid post'));
}
$post = $this->Post->findById($id);
if(!$post) {
throw new NotFoundException(__('Invalid post'));
}
$this->set('post', $post);
}
public function add() {
if($this->request->is('post')) {
$this->Post->create();
if($this->Post->save($this->request->data)) {
$this->Session->setFlash(__('Your post has been saved.'));
return $this->redirect(array('action' => 'index'));
}
$this->Session->setFlash(__('Unable to add your post.'));
}
}
public function edit($id = null) {
if(!$id) {
throw new NotFoundException(__('Invalid post'));
}
$post = $this->Post->findById($id);
if (!$post) {
throw new NotFoundException(__('Invalid post'));
}
if ($this->request->is(array('post','put'))) {
$this->Post->id = $id;
if ($this->Post->save($this->request->data)) {
$this->Session->setFlash(__('Your post has been updated.'));
return $this->redirect(array('action' => 'index'));
}
$this->Session->setFlash(__('Unable to update your post.'));
}
if (!$this->request->data) {
$this->request->data = $post;
}
}
public function delete($id) {
if ($this->request->is('get')) {
throw new MethodNotAllowedException();
}
if ($this->Post->delete($id)) {
$this->Session->setFlash(
__('The post with id: %s has been deleted.', h($id))
);
} else {
$this->Session->setFlash(
__('The post with id: %s could not be deleted.', h($id))
);
}
return $this->redirect(array('action' => 'index'));
}
}
?>
2015/7/2現在エラーは吐かれていないので一旦削除致します。
追記
こちらがindex.ctpのソースファイルです。
<!-- File: /app/View/Posts/index.ctp -->
<h1>Blog posts</h1>
<p><?php echo $this->Html->link('Add Post', array('action' => 'add')); ?></p>
<table>
<tr>
<th>Id</th>
<th>Title</th>
<th>Actions</th>
<th>Created</th>
</tr>
<!-- ここから、$posts配列をループして、投稿記事の情報を表示 -->
<?php foreach ($posts as $post): ?>
<tr>
<td><?php echo $post['Post']['id']; ?></td>
<td>
<?php echo $this->Html->link($post['Post']['title'], array('action' => 'view', $post['Post']['id'])); ?>
</td>
<td>
<?php echo $this->Form->postLink(
'Delete',
array('action' => 'delete', $post['Post']['id']),
array('confirm' => 'Are you sure?'));
?>
<?php echo $this->Html->link('Edit', array('action' => 'edit', $post['Post']['id'])); ?>
</td>
<td><?php echo $post['Post']['created']; ?></td>
</tr>
<?php endforeach; ?>
</table>
そして以下が使用しているViewファイルです。
<!-- File: /app/View/Posts/add.ctp -->
<h1>Add Post</h1>
<?php
echo $this->Form->create('Post');
echo $this->Form->input('title');
echo $this->Form->input('body', array('rows' => '3'));
echo $this->Form->end('Save Post');
?>
<!-- File: /app/View/Posts/view.ctp -->
<h1><?php echo h($post['Post']['title']); ?></h1>
<p><small>Created: <?php echo $post['Post']['created']; ?></small></p>
<p><?php echo h($post['Post']['body']); ?></p>
<!-- File: /app/View/Posts/edit.ctp -->
<h1>Edit Post</h1>
<?php
echo $this->Form->create('Post');
echo $this->Form->input('title');
echo $this->Form->input('body', array('rows' => '3'));
echo $this->Form->input('id', array('type' => 'hidden'));
echo $this->Form->end('Save Post');
?>
こちらにレスポンスヘッダ情報に関して追記させて頂きます。(Chromeを使用)

続き

追記7/2(addアクション後のソースコードの状態)

-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
+4
Error: Fatal Error (4): syntax error, unexpected ')', expecting ',' or ';' in [/Applications/MAMP/htdocs/cake/app/View/Posts/index.ctp, line 17
で、
/Applications/MAMP/htdocs/cake/app/View/Posts/index.ctp
の17行目でシンタックスエラーがでているので、リダイレクトはしてるものの表示に失敗しているのではないでしょうか?
リダイレクトの確認は、Apache のアクセスログを確認、または FireFox の FireBug で、HTTPレスポンスが参照できれば確認できるかと思います。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
'Delete',
array('action' => 'delete', $post['Post']['id']),
array('confirm' => 'Are you sure?'));
?>
↓
<?php echo $this->Form->postLink('Delete',
array('action' => 'delete', $user['user']['id']),
array('class' => 'btn btn-sm btn-danger'),
__('Are you sure?'));
?>
いろいろサンプルを見たのですが、記述が違っていたので投稿してみました。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 90.36%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
ikuwow
2015/06/30 01:33
エラーログ(app/tmp/logs/error.log)にはどのように出力されていますか?
y_natsui
2015/06/30 01:56 編集
特に今現在エラーログは吐かれていないみたいです。以前は少し作りが違ったので、その際のエラーログが吐かれてはいました。
直近のエラーだと以下の通りでした。
(下記だと見にくいと思いましたので上記に追記しております)
2015-06-28 17:52:48 Error: Fatal Error (4): syntax error, unexpected ')', expecting ',' or ';' in [/Applications/MAMP/htdocs/cake/app/View/Posts/index.ctp, line 17]
2015-06-28 17:52:48 Error: [FatalErrorException] syntax error, unexpected ')', expecting ',' or ';'
Request URL: /cake/posts/
Stack Trace:
#0 /Applications/MAMP/htdocs/cake/lib/Cake/Error/ErrorHandler.php(213): ErrorHandler::handleFatalError(4, 'syntax error, u...', '/Applications/M...', 17)
#1 [internal function]: ErrorHandler::handleError(4, 'syntax error, u...', '/Applications/M...', 17, Array)
#2 /Applications/MAMP/htdocs/cake/lib/Cake/Core/App.php(933): call_user_func('ErrorHandler::h...', 4, 'syntax error, u...', '/Applications/M...', 17, Array)
#3 /Applications/MAMP/htdocs/cake/lib/Cake/Core/App.php(906): App::_checkFatalError()
#4 [internal function]: App::shutdown()
#5 {main}
2015-06-28 17:55:28 Error: [NotFoundException] Invalid post
Request URL: /cake/posts/view
Stack Trace:
#0 [internal function]: PostsController->view()
#1 /Applications/MAMP/htdocs/cake/lib/Cake/Controller/Controller.php(490): ReflectionMethod->invokeArgs(Object(PostsController), Array)
#2 /Applications/MAMP/htdocs/cake/lib/Cake/Routing/Dispatcher.php(193): Controller->invokeAction(Object(CakeRequest))
#3 /Applications/MAMP/htdocs/cake/lib/Cake/Routing/Dispatcher.php(167): Dispatcher->_invoke(Object(PostsController), Object(CakeRequest))
#4 /Applications/MAMP/htdocs/cake/app/webroot/index.php(118): Dispatcher->dispatch(Object(CakeRequest), Object(CakeResponse))
#5 {main}
これ何か関係あったりしますでしょうか?
bash_sh
2015/06/30 04:32
app/View/Posts/index.ctpの解釈でエラーが生じているようですので、
該当のファイルの中身を示して頂けると回答しやすいと思います。
y_natsui
2015/06/30 22:03 編集
index.ctpなどのViewファイルを追記させて頂きました。