• 締切済み

CakePHPのredirect()関数について

<?php App::uses('AppController', 'Controller'); class DayController extends AppController{ public function index(){ $this->autoRender = false; $date = new DateTime(); $date->setTimeZone(new DateTimeZone('Asia/Tokyo')); $str = $date->format("H:i:s"); $this->redirect("./other/".urlencode($str)); } public function other($param){ $this->autoRender = false; $str = urldecode($param); echo '<html><head><title>現在時刻</title>'; echo '<meta charset="UTF-8"></head>'; echo '<body>'; echo '<h1>現在の時刻は、'.$str. 'です。</h1>'; echo '</body></html>'; } } ?> 上記のようなスクリプトをApacheのhtdodos./cakephp/App/Controller フォルダに入れて 動作させると、下記のようなエラーが出力されます。 redirect() 関数の引数がおかしいようですが、どこがどうおかしいのか 教えていただけませんか。 Warning (2): Missing argument 1 for DayController::other() [APP\Controller\DayController.php, line 14] Notice (8): Undefined variable: param [APP\Controller\DayController.php, line 16]

  • PHP
  • 回答数3
  • ありがとう数12

みんなの回答

  • ONEONE
  • ベストアンサー率48% (279/575)
回答No.3

index側でredirectする前にdebugなりvur_dumpしてみてください。 もちろんredirectはコメントアウトしてください。 URL直叩きで正常に表示されますか? ファイルにログを出すには$this->log('debugしたいもの', LOG_DEBUG) でtmp/logs/debug.logに吐かれます。 関数仕様>公式のドキュメントではダメ?

beterugius
質問者

お礼

ご回答、ありがとうございました。

  • ONEONE
  • ベストアンサー率48% (279/575)
回答No.2

string指定でもイケるようですね。 "./other/".urlencode($str) をデバッグしたらどうなりますか? ./other/のドットいらない気がします。 paramがないということはurlencode($str)が怪しいような気がします。

beterugius
質問者

お礼

ご回答、ありがとうございました。

beterugius
質問者

補足

ONEONEさんがおっしゃるとおりに、"./other/".urlencode($str) でデバッグすると、同じエラーが表示されます。(./other/ の.を外しても同様です。) リダイレクトしているので、function index()側で、urlencode($str)をvar_dump()しても、中身が表示されません。 中身をファイルに出力してみようか考えております。 あと、CakePHPの関数リファレンスページなど、ないでしょうか?文章ではなく、検索で関数仕様が表示されるものです。

  • ONEONE
  • ベストアンサー率48% (279/575)
回答No.1

redirectの使い方ってそういう使い方できんのかな? arrayでコントローラとアクションと引数を渡してみては。 http://book.cakephp.org/2.0/ja/controllers.html#id8

beterugius
質問者

お礼

ご回答、どうもありがとうございました。

関連するQ&A

  • CakePHP redirect関数の文法

    <?php App::uses('AppController', 'Controller'); class DayController extends AppController{ public function index(){ $this->autoRender = false; $date = new DateTime(); $date->setTimeZone(new DateTimeZone('Asia/Tokyo')); $str = $date->format("H:i:s"); $this->redirect("./other/".urlencode($str)); } public function other($param){ $this->autoRender = false; $str = urldecode($param); echo '<html><head><title>現在時刻</title>'; echo '<meta charset="UTF-8"></head>'; echo '<body>'; echo '<h1>現在の時刻は、'.$str. 'です。</h1>'; echo '</body></html>'; } } ?> 上記のようなCakePHPのスクリプトにおいて、下記のようなエラーが返ってきます。 Warning (2): Missing argument 1 for DayController::other() [APP\Controller\DayController.php, Notice (8): Undefined variable: param [APP\Controller\DayController.php, redirect()関数の引数がおかしいのでしょうか。

  • Cakephp AppControllerについて

    CakePHPにて、 AppControllerクラスに処理を記述しようと思い、 app/app_controller.php を設置したのですが、 app/app_controller.php がどうしても呼び出されません。 色々調べてるのですが、どうしても原因が分かりません。 原因等分かる方がおりましたら教えて頂けますでしょうか? ---------------------- ■cakephpのバージョンは1.3です。 ■app/app_controller.phpの中身は↓です。 class AppController extends Controller { function __construct() { parent::__construct(); } function beforeFilter() { echo "test"; ←これが呼ばれない。 } } ----------------------

    • ベストアンサー
    • PHP
  • CakePHP 1.3について

    CakePHPが初心者です。 Views-userdetail-index.ctpにて <?php echo $form->create(null,array('type'=>'get','action'=>'./updateRecord')); ?> ~ <?php echo $form->textarea("User.remarks", array("cols" => 22,"rows" => 2)); ?> ~ を記述し、userdetail_controllerにて function updateRecord(){ if (!empty($this->data)){ $this->User->id = 1; $this->User->saveField('remarks','exists'); } else { $this->User->id = 1; $this->User->saveField('remarks','empty'); } $this->redirect('.'); } を記述しています。 しかし、どうしても「!empty($this->data)」の判別によってemptyとなってしまいます。 User.remarksの部分をUserdetailにして色々ためしましたが、どうしても値の受け渡しがうまくいかないのです。 どなたかご教授を宜しくお願い致します。

    • ベストアンサー
    • PHP
  • CakePHPでのログイン画面生成について。

    CakePHPでのログイン画面生成について。 参考URLは以下です。 http://h2o-space.com/blog/1950 以上の記事の通り設定・アップロードをし、 add.phpにアクセスすると Missing Method in ViewsController Error: The action add.php is not defined in controller ViewsController Error: Create ViewsController::add.php() in file: app/controllers/views_controller.php. <?php class ViewsController extends AppController { var $name = 'Views'; function add.php() { } } ?> とのエラーが出ます。 <?php class ViewsController extends AppController { var $name = 'Views'; function add.php() { } } ?> をviews_controller.phpに書き込むと Parse error: syntax error, unexpected '.', expecting '(' in /home/rslitefc2/users/アカウント/public_html/login/app/controllers/views_controller.php on line 7 と、エラーが出ます。 7行目の記述はfunction add.php() {です。 どうしたらログイン画面を正しく生成することが出来るでしょうか? どなたかお教えいただければ幸いです。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • cakePHPでSQLが実行できない。

    cakePHP2.2でSQLが実行できません。 実行のやり方が悪いのでしょうが ネットで探してもイマイチ理解できません・・ やりたいのは画面から入力された値を使い SQLを実行することです。 何が駄目なのか教えてください。 controllerのソース <?php class BuhinController extends AppController { public $layout = 'user_default'; //## ログイン処理 public function login(){ $bool = false; $rslt = null; Configure::write('debug', 1); $sql = "select id from table_user where add = '". $_POST["add"] . "' "; $sql = $sql. " and pass = '". $_POST["pass"] . "'"; $this->query($sql); } public function index(){ } public function logout(){ $this->Auth->logout(); } } ?> エラーメッセージ Fatal Error Error: Call to undefined method BuhinController::query() File: C:\xampp\htdocs\cake\app\Controller\BuhinController.php よろしくお願いします。

    • ベストアンサー
    • PHP
  • cakePHPのエラー

    Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'validateSearch' at line 1 SQL Query: validateSearch Notice: If you want to customize this error message, create app/View/Errors/pdo_error.ctp というエラーが出て困っています。 validateSearchの付近を確認してもよくわかりません。 searchpluginを使っているのですが、上手くいきません。 コントローラーは、 <?php App::uses('AppController', 'Controller'); class Mac554FoodDatasController extends AppController { public $name='Mac554FoodDatas'; public $components =array('Search.Prg'); public $presetVars=array(); public function beforeFilter() { //検索対象のフィールド設定代入 $this->presetVars = $this->Mac554FoodData->presetVars; // ページャ設定 $pager_numbers = array( 'before' => ' - ', 'after'=>' - ', 'modulus'=> 10, 'separator'=> ' ', 'class'=>'pagenumbers' ); $this->set('pager_numbers', $pager_numbers); } public function find() { $datas=$this->Mac554FoodData->find('all'); $this->set('datas',$datas); //検索条件設定 $this->Prg->commonProcess(); //検索条件取得 $tabe=$this->passedArgs; $conditions = $this->Mac554FoodData->parseCriteria['$tabe']; //ページャ関係 $this->paginate =array( 'conditions' => $conditions, 'limit' =>10 ); $this->set('Mac554FoodDatas',$this->paginate('Mac554FoodData')); // レイアウト関係 $this->layout = "plain"; $this->set("header_for_layout", "Sample Application"); $this->set("footer_for_layout", "copyright by SYODA-Tuyano. 2011."); // post時の処理 //$this->set('Mac554FoodDatas',$this->Mac554FoodData->find('all')); } public function index() { $this->layout = "plain"; $this->set("header_for_layout", "Sample Application"); $this->set("footer_for_layout", "copyright by SYODA-Tuyano. 2011."); //レイアウト } } ?> で、検索フォームはエレメントで <?php echo $this->Form->create('Mac554FoodData', array('url' => '/Mac554FoodDatas/find'))?> <fieldset> <legend>Search or Die!</legend> <dl> <dt><label>ユーザname</label></dt> <dd><?php echo $this->Form->input('name', array( 'type' => 'text', 'div' => false, 'label' => false))?></dd> <dt><label>time</label></dt> <dd><?php echo $this->Form->input('time', array( 'type' => 'text', 'div' => false, 'label' => false ))?></dd> <dt><label>naiyoudao</label></dt> <dd><?php echo $this->Form->input('naiyoudao', array( 'type' => 'text', 'div' => false, 'label' => false ))?></dd> </dl> <?php echo $this->Form->submit('検索',array('div'=>false,'escape'=>false))?> </fieldset> <?php echo $this->Form->end()?> のように作りました。 モデルは、 <?php class Mac554FoodDatas extends AppModel{ public $name=Mac554FoodData public $actsAs = array('Search.Searchable'); // 検索対象のフィルタ設定 public $filterArgs = array( array('name' => 'name', 'type' => 'value', 'field' => 'Mac554FoodData.name'), array('name' => 'time', 'type' => 'like', 'field' => 'Mac554FoodData.time'), array('name' => 'naiyoudao', 'type' => 'like', 'field' => 'Mac554FoodData.naiyoudao'), ); //検索対象のフィールド設定 public $presetVars = array( array('field' => 'name', 'type' => 'value'), array('field' => 'time', 'type' => 'value'), array('field' => 'naiyoudao', 'type' => 'value'), ); } という感じで作りました。 投げているSQL文を見ると、 SELECT `Mac554FoodData`.`id`, `Mac554FoodData`.`time`, `Mac554FoodData`.`name`, `Mac554FoodData`.`naiyoudao`, `Mac554FoodData`.`twinoid` FROM `mac554_foodlog`.`mac554_food_datas` AS `Mac554FoodData` WHERE 1 = 1 となっています。 よろしくお願い致します

    • ベストアンサー
    • PHP
  • cakephp エラーハンドリングができません

    cakephpを利用しているシステムで、2種類のエラーを作っておいてcontrollersの呼び出しで振り分けたいと思いますがうまくできません。 マニュアルページ(http://book.cakephp.org/ja/view/154/Error-Handling)を参考に、 app/app_error.phpを以下のように作成しました。 ((1)エラー:error(2)エラー:errorsta) ----------------------------------------------------------------- <?php class AppError extends ErrorHandler{ function error(){ $this->controller->viewPath = 'errors'; $this->__outputMessage('error'); } function errorsta(){ $this->controller->viewPath = 'errors'; $this->__outputMessage('errorsta'); } } ?> ----------------------------------------------------------------- 上記内容で、メソッドerrorは実行できるのですが、errorstaが一向に動いてくれず、404扱いになってしまいます。 app/app_error.php以外にも設定が必要なものがあるのでしょうか?

    • 締切済み
    • PHP
  • CakePHPのコントローラの作成

    PHP初心者です。 CakePHPをインストールし試しにTestControlerを作成したのですが、ページが開きません。 PageNotFoundになります。 考えられる原因が分かれば教えて下さい。 【やったこと】 ・ [CakePHP root]\app\Controller に TestController.php を作成。 <?php App::uses('AppController', 'Controller'); class TestController extends AppController { } ・ URLにアクセス http://[CakePHP root]/Test ⇒ Not Found http://[CakePHP root]/test ⇒ Not Found http://[CakePHP root]/app/webroot/index.php?url=test ⇒ CakePHPのindex.phpが表示される。 http://[CakePHP root]/app/webroot/index.php?url=Test ⇒CakePHPのindex.phpが表示される。 以下のサイトを参考にしました。mod_rewriteが動いていない可能性がある ということなので、URL直接指定もしてみましたがダメでした。 http://codezine.jp/article/detail/768?p=2 よろしくお願いします。

    • ベストアンサー
    • PHP
  • cakephpでidに紐づけて記事を表示

    cakephpでblogアプリケーションを作成しています。 /blog/記事のID のURLをクリックすると該当の記事が見れるようにしたいです。 不思議なのですが、DB側のカラム名がid(blogのID名)だと正しく表示されるのですが、DBの値をnoやnooなどid以外の値にすると何も表示されません。 デバッグのSQLさえも何も表示されない状況です。 具体的なコードを記載します。 正しく表示される場合 コントローラ class PostsController extends AppController { public $helpers = array('Html','Form'); public function index(){ $this->set('posts',$this->Post->find('all')); } public function view($xxx = null){ $this->Post->id = $xxx; $this->set('post',$this->Post->read()); } } ビュー <h2><?php echo h($post['Post']['num']); ?></h2> <p><?php echo h($post['Post']['hel']); ?></p> モデル <?PHP class Post extends AppModel { } ?> 何も表示されない場合 コントローラ 以下だけが上記と異なります。 public function view($xxx = null){ $this->Post->no = $xxx; ★この部分 $this->set('post',$this->Post->read()); } ビュー・モデルは同上で、DBのカラム名をidからnoに変更しています。 データベースの中身は以下です。 以下のidをnoに変更した場合うまくいきません。 id num hel _________________ 3 4 hello world 21 21 abcde 0 3 okokokoko 何かアドバイスいただけないでしょうか。 viewを見る際に何もデバッグ情報が出ないので何が悪いのかもわからない状況です。

    • 締切済み
    • PHP
  • CakePHPのsyntaxエラーについて

    お世話になります。 CakePHPでサイト構成をしています。 教本に従ってコードを書いています。 最も簡単なサイトを作るという章で、MyPagesContorllerを作り、Viewにindex.ctpとedit.ctpを作り、ModelにUser.php、 ContollerにUsersController.phpを作りました。 ユーザーの一覧表示まで出来ましたが、編集機能を作るところでつまずいてます。 UsersController.php <?php class UsersController extends AppController { //モデルの指定(users) public $uses = array('User'); //レイアウトの指定(defaultの場合はなくても動作する) public $layout = 'default'; //indexアクション public function index () { $userData = $this->User->find('all'); //Viewにデータを送る $this->set('userData', $userData); } } //editアクション public function edit($id = null) { if($this->request->isPost() || $this->request->isPut()) { if(!empty($this->data)) { if($this->User->save($this->data)) { $this->Session->setFlash('保存しました'); $this->redirect(array('action' => 'index')); return; } } 下記の様なエラーが表示されてしまいます。 Error: syntax error, unexpected 'public' (T_PUBLIC) 本にある通りに記述して、何度も確認しましたが間違いが見つけられません。 写真に添付しているline20の前後を見ても特にミスは無い様に思えます どこが間違っているのでしょうか。。。 ちなみにeditアクションのソースを消すと、エラーは表示されません。 どなたかご教授頂けないでしょうか。 宜しくお願いいたします。

専門家に質問してみよう