CakePHPのsyntaxエラーについて

このQ&Aのポイント
  • CakePHPでサイト構成をしていますが、編集機能を作るところでsyntaxエラーが発生しています。
  • エラーメッセージは「syntax error, unexpected 'public' (T_PUBLIC)」です。
  • コードの記述を何度も確認しましたが、間違いが見つかりません。どこが間違っているのか教えていただけないでしょうか。
回答を見る
  • ベストアンサー

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アクションのソースを消すと、エラーは表示されません。 どなたかご教授頂けないでしょうか。 宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

開く { と  閉じる } の位置や数を  教本と見比べてみてはどうでしょう。

関連するQ&A

  • 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でFormを使用したDBへの登録

    cakePHP初心者です。 ブラウザで入力画面→確認画面→完了画面と遷移して、 DBに入力した値を登録する基本の動きをさせたいのですが、 Controllerの動きが分かりません。 Viewのファイルを 入力画面:entry.ctp 確認画面:confirm.ctp 完了画面:complete.ctp とします。 1.SampleControllerからentryページを表示 public function entry(){ } 2.etntry.ctpでFormを作成 <?php echo $this->Form->create('Sample', array('action' => 'confirm')) . PHP_EOL; ?> 3.SampleControllerでconfirmメソッドが呼ばれる public function confirm(){ if($this->request->is('post')){ データを画面にセット? } } 4.confirm.ctpが表示され、登録ボタンを押すと完了画面にFormを作成 <?php echo $this->Form->create('Sample', array('action' => 'complete')) . PHP_EOL; ?> 5.SampleControllerでcompleteメソッドが呼ばれる public function confirm(){ if($this->request->is('post')){ バリデーションチェック後、DBに登録? } } この流れでよいのでしょうか。 完了画面のcompleteでバリデーションチェックを行うことに違和感を感じています。 仮にconfirmで実施するとしても、書き方が良く分かりません。 <?php echo $this->Form->create('Sample', array('action' => 'confirm')) . PHP_EOL; ?> と書いたら、3の処理とかぶってしまいますよね・・・? 説明分かりにくくてすみません・・・。 ネットで調べつつやっていたのですが、一連の流れをすべて書いたサイトに見当たらず、 途方に暮れています。 どなたかご教示お願いします。

    • 締切済み
    • PHP
  • CakePHP2について

    viewにデータを送るときに、1の $this->set() と2の $this->request->dataは、 どう違うのでしょうか? ご教授ください。 public function view($id = null) { // レコードを選択 $this->Post->id = $id; // レコードデータを取得しビューへ送る $this->set('post', $this->Post->read());---------1 } public function edit($id = null){ $this->Post->id = $id; if($this->request->is('get')) { $this->request->data = $this->Post->read();-------2 }

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

    現在、cakePHPを勉強しているのですが、分からなくて進めない箇所があり困っています。 ユーザーがフォームからデータを入力し、DBにデータを格納する際、フォーム項目にないデータを一緒に入力するためにはどうすればいいのか分かりません。 例)ユーザーフォーム入力欄 name email password ↓ ■DB側に格納したいデータ id(AUTO_INCREMENT) contact_id(問題箇所) name email password created modified 現在、下記のようなコードになっているのですが、ご教授頂ければ幸いです。 ■Controller/RequestController public function index(){ if(!empty($this->request->data)){ if($this->request->data[$this->Request->alias]['confirmed']){ //保存実行 //成功時に画面遷移・失敗時にメッセージを表示 if($this->Request->saveAll($this->request->data)){ $this->Session->setFlash('お申し込み有難う御座います。新規依頼が完了しました。'); $this->redirect(array('action' => 'index','controller' => 'details')); }else{ $this->request->data[$this->Request->alias]['confirmed'] == false; $this->Session->setFlash('新規依頼に失敗しました。'); } }else{ if($this->Request->saveAll($this->request->data, array('validate' => 'only'))){ //saveALLは値をまとめて保存するモデルメソッドだけど('validate' => 'only')にすることで //保存処理を行わずにバリデーションのみを実行することができます //入力データに問題がなかった場合は確認画面を呼び出し $this->render('confirm'); }else{ $this->Session->setFlash('エラーがあります。入力内容をご確認下さい。'); } } } }

    • 締切済み
    • 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
  • Undefined indexというエラーについて

    初めまして。プログラミング初心者です CakePHPでちょっとした機能、つまりあるページには注意事項を表示し、 あるページには表示しない。といった単純な実装をしたいです。 app/View/Contracts/detail.ctpというファイルに 下記の判定文を書き、テキストの表示/非表示を試みていますが エラーが表示されてしまいます。 Notice (8): Undefined index: status [APP/View/Contracts/detail.ctp, line 34] ーーーーーーーーーーーーーーーーーーーーーーーーーー 行 コード 33 <?php 34 if($this->request->query['status']) { //判定文 35 36 echo ''; // "全て以外" 37 38 } elseif($this->request->query['campaign_id']) {  //それ以外の判定文 39 40 echo 'テキスト'; 41 } 42 ?> ーーーーーーーーーーーーーーーーーーーーーーーーーー statusというテーブルをSQLで登録してあり、クエリパラメータを判断材料として 実装したいです。 indexとの関係について調べれば良いのでしょうか? どうぞよろしくお願いします。

  • CakePHP Undefined index

    CakePHP(cake_1.2.1)にて、ユーザーログイン機能を作成しようとしてます。 class UsersController extends AppController{ var $name = 'Users'; var $uses = array('User'); // Userモデルを使用 var $needAuth = true; // ログイン必須のフラグ /* * ログインページ */ function login() { // ページタイトルの設定 $this->pageTitle = 'Web-local.community「local.SNS」'; // データが送られてきたら if(!empty($this->data)){ // パスワードを暗号化 $this->data['User']['pwd'] = md5($this->data['User']['pwd']); // 入力された[id]と[pwd]がデータベースにある場合のみ[$user_data]に値が入る $user_data = $this->User->findByEmailAndPwd($this->data['User']['email'], $this->data['User']['pwd']); ・・・ というコントローラーをWebサイトの先人様のを参考にして試作しているのですが、あらかじめ作成したusersテーブルに登録しておいたユーザーのメールアドレス、パスワードを入力して、ログインボタンを押すと、 Notice (8): Undefined index: User [APP\controllers\users_controller.php, line 18] Notice (8): Undefined index: email [APP\controllers\users_controller.php, line 20] というエラーが出て困ってます。"User"、"email"は、知りませんと言っているのでしょう。 モデル等の宣言の箇所で、 // var $name = 'Users'; // var $uses = array('User'); // Userモデルを使用 あるいは、 // var $name = 'Users'; var $uses = array('User'); // Userモデルを使用 あるいは var $name = 'Users'; // var $uses = array('User'); // Userモデルを使用 とコメントアウトしても、前記エラーは変わりません。Webをいろいろ検索しても、解決策が見当たらず、投稿させていただきました。何か、設定が抜けているのでしょうか?どなたかすみませんが、教えてください。

  • CakePHP recursiveプロパティの使い

    大分類、中分類、小分類のテーブルを作っており、大分類・中分類間、中分類、小分類間は、それぞれのModelでbelongsToを用いてアソシエーションができていることは確認できております。 小分類のindex.ctpで、大分類・中分類・小分類の各項目を表示する表を作成しようと考えており、小分類のModelで、下記の記述をしました。 $this->set('「変数名」',$this->「小分類のModel名」->find('all',array('recursive'=>2))); しかし、その結果、 「Notice (8): Undefined index: 「大分類のModel名」 [APP/View/…/index.ctp, line 12]」 というエラーが戻ってきてしまっています。 recursiveプロパティで2を選択おけば、「小分類」のModelからでも、「中分類」のModelを経由してbelongsToでつながっている「大分類」のデータを拾ってくることができると思っていましたが、そうはいかなかったのだと思います。 どなたか、ご教示頂けないでしょうか。 よろしくお願い致します。

    • 締切済み
    • PHP
  • cake php について

    cake php フォームについて View <?php echo $this->Form->create(null,array('type'=>'post','action'=>'./serch')); echo $this->Form->text('serch'); echo $this->Form->end('検索'); ?> Controller //検索機能 public function serch(){ $this->modelClass = null; if ($this->request->is('post')) { $a = Sanitize::stripAll( $this->request->data['serch']); $conditions = array("Manga.title" =>$a); $this-> set('datas',$this->paginate($conditions)); } } で実行すると(いろいろ省いていますが) Undefined index: serch と出ます。色々試してみたのですがどうやら $a = Sanitize::stripAll( $this->request->data['serch']); ここの部分がおかしいみたいなのですが理由が分かりません。 よろしければご教授ください。よろしくお願いします。

    • 締切済み
    • PHP
  • CakePHPでディレクトリ分けをしたい

    CakePHP2.3.4、サーバーはロリポップにて開発を行っております。 やりたいことは、コントローラーのディレクトリ分けです。 以下のようなディレクトリ構造にして、 app  |_Controller  |   |_admin  |    |    |_LoginController.php  ※メソッドはindex()のみと仮定  |    |    |_・・・.php  |    |  |    |_ListController.php  ※メソッドはindex()のみと仮定  |  |_View ※Viewも分けますが、今は省略しています。 アプリケーション「LoginCntroller.php」にアクセスする場合は http://○○.ne.jp/admin/login/index アプリケーション「ListController.php」にアクセスする場合は http://○○.ne.jp/list/index でアクセスしたいです。 自分なりに調べて、「bootstrap.php」に以下追加、 App::build(array(  'Controller' => array(ROOT.DS.APP_DIR.DS.'Controllers'.DS.'Admin'.DS,) )); 「route.php」に以下追加、 Router::connect('/admin/login', array('controller' => 'login', 'action' => 'index')); などと行ってみてはいるのですが、結果、以下のエラーになってしまいます。 Missing Controller Error: AdminController could not be found. Error: Create the class AdminController below in file: app/Controller/AdminController.php <?php class AdminController extends AppController { } Controller直下に配置したアプリケーションに関しては問題なく実行されます。 何が悪いのか見当もつかず困っております。 よろしければご教授いただけませんでしょうか。

    • 締切済み
    • PHP