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

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

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

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

PHP

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

Symfony

Symfony はPHPで記述されたWebアプリケーションフレームワークです。よく利用するコーディングをテンプレーティングするなど、Webアプリケーション開発の効率化を目的として設計されています。

composer

Composerとは、PHP5.3.2以上で使用可能なパッケージ管理ツールです。指定ディレクトリ内だけでパッケージ管理します。

Q&A

解決済

3回答

5733閲覧

PHP Parse error: syntax error, unexpected 'class' (T_CLASS)のエラー

youplus40

総合スコア19

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

PHP

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

Symfony

Symfony はPHPで記述されたWebアプリケーションフレームワークです。よく利用するコーディングをテンプレーティングするなど、Webアプリケーション開発の効率化を目的として設計されています。

composer

Composerとは、PHP5.3.2以上で使用可能なパッケージ管理ツールです。指定ディレクトリ内だけでパッケージ管理します。

0グッド

0クリップ

投稿2020/11/05 03:25

編集2020/11/05 04:49

前提・実現したいこと

PHP(Symfony)で既存のシステムのsymfonyアップデート(2.8->3.0)を行っております。
再度、composer updateをした際、下記のエラーが出ました。
また、symfonyのバージョンを上げる際に該当コードの部分は修正しておりません。

原因がどこにあるのか教えていただければと思います。

発生している問題・エラーメッセージ

PHP Parse error: syntax error, unexpected 'class' (T_CLASS), expecting variable (T_VARIABLE) or '$' in /home/vagrant/Symfony/src/Ahi/Sp/AdminBundle/Controller/BaseArticleController.php on line 46

該当のソースコード

PHP

1//BaseArticleController.php 2 protected function indexAction(Request $request) 3 { 4 // 検索フォームを作成(下の::classの部分がエラーの該当箇所) 5 $searchForm = $this->createForm(new ArticleSearchType::class, null, array( 6 "action" => $this->generateUrl($this->indexRoute), 7 "login_staff" => $this->getStaff(), 8 )); 9//他省略 10 }

PHP

1// ArticleSearchType.php 2 3/** 4* 記事検索用のフォームタイプ 5*/ 6class ArticleSearchType extends AbstractType 7{ 8 /** 9 * {@inheritdoc} 10 */ 11 public function buildForm(FormBuilderInterface $builder, array $options) 12 { 13 $loginStaff = $options['login_staff']; 14 $shop = $options['login_staff']->getShop(); 15 // 詳細検索 16 $builder->add("advanced", "hidden", array( 17 "required" => false, 18 )); 19 20 // 記事種別 21 $builder->add("articleType", "hidden", array( 22 "required" => false, 23 )); 24 25 // 記事ステータス 26 $builder->add("articleStatus", "hidden", array( 27 "required" => false, 28 )); 29 30 // 本部スタッフでログインしている場合はブランド、ショップで検索可 31 if ($loginStaff->isHq()) { 32 // ブランド 33 $builder->add("brand", "brandChoice", array( 34 "required" => false, 35 )); 36 37 // ショップ 38 $builder->add("shop", "shopChoice", array( 39 "required" => false, 40 )); 41 } 42 43 // 記事ID 44 $builder->add("id", "text", array( 45 "required" => false, 46 )); 47 48 // 検索ワード 49 $builder->add("word", "text", array( 50 "required" => false, 51 "mb_convert_kana_option" => null, 52 )); 53 54 // 検索ボタン 55 $builder->add('search', 'submit'); 56 57 // サブミットされたデータによりフォームを動的に生成する 58 $builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) use ($shop) { 59 $data = $event->getData(); 60 $form = $event->getForm(); 61 62 // 記事種別 63 $articleType = ""; 64 if (isset($data["articleType"]) && in_array($data["articleType"], Parameters::getArticleTypeKeys())) { 65 $articleType = $data["articleType"]; 66 } 67 $data["articleType"] = $articleType; 68 69 // 記事ステータス 70 $articleStatus = ""; 71 if (isset($data["articleStatus"]) && in_array($data["articleStatus"], Parameters::getArticleStatusKeys())) { 72 $articleStatus = $data["articleStatus"]; 73 } 74 $data["articleStatus"] = $articleStatus; 75 76 $event->setData($data); 77 78 // 詳細検索のフォームを追加 79 if (isset($data["advanced"]) && $data["advanced"]) { 80 // 投稿者 81 $form->add("author", "staffChoice", array( 82 "required" => false, 83 "search_params" => array("shop" => $shop), 84 )); 85 86 // 投稿日時 87 $form->add("publishDateTimeFrom", "datetime", array( 88 "required" => false, 89 "widget" => "single_text", 90 "format" => "yyyy/MM/dd HH:mm", 91 "attr" => array("class" => "formDateTime"), 92 )); 93 $form->add("publishDateTimeTo", "datetime", array( 94 "required" => false, 95 "widget" => "single_text", 96 "format" => "yyyy/MM/dd HH:mm", 97 "attr" => array("class" => "formDateTimeTo"), 98 )); 99 100 // 有効期限 101 $form->add("expireDateTimeFrom", "datetime", array( 102 "required" => false, 103 "widget" => "single_text", 104 "format" => "yyyy/MM/dd HH:mm", 105 "attr" => array("class" => "formDateTime"), 106 )); 107 $form->add("expireDateTimeTo", "datetime", array( 108 "required" => false, 109 "widget" => "single_text", 110 "format" => "yyyy/MM/dd HH:mm", 111 "attr" => array("class" => "formDateTimeTo"), 112 )); 113 114 // 記事種別が 全て or コーディネート or レコメンドアイテム の場合 115 if (in_array($articleType, array("", "coordinate", "recommend"))) { 116 // 着用者 117 $form->add("wearer", "staffChoice", array( 118 "required" => false, 119 "search_params" => array("shop" => $shop), 120 )); 121 122 // 品番 123 $form->add("itemNo", "text", array( 124 "required" => false, 125 )); 126 } 127 128 // 記事種別が 全て or ショップイベント or ブランド共通イベント の場合 129 if (in_array($articleType, array("", "shopevent", "brandevent"))) { 130 // イベント開始日時 131 $form->add("eventStartDateFrom", "datetime", array( 132 "required" => false, 133 "widget" => "single_text", 134 "format" => "yyyy/MM/dd HH:mm", 135 "attr" => array("class" => "formDateTime"), 136 )); 137 $form->add("eventStartDateTo", "datetime", array( 138 "required" => false, 139 "widget" => "single_text", 140 "format" => "yyyy/MM/dd HH:mm", 141 "attr" => array("class" => "formDateTimeTo"), 142 )); 143 144 // イベント終了日時 145 $form->add("eventEndDateFrom", "datetime", array( 146 "required" => false, 147 "widget" => "single_text", 148 "format" => "yyyy/MM/dd HH:mm", 149 "attr" => array("class" => "formDateTime"), 150 )); 151 $form->add("eventEndDateTo", "datetime", array( 152 "required" => false, 153 "widget" => "single_text", 154 "format" => "yyyy/MM/dd HH:mm", 155 "attr" => array("class" => "formDateTimeTo"), 156 )); 157 } 158 } 159 }); 160 } 161 162 /** 163 * {@inheritdoc} 164 */ 165 public function setDefaultOptions(OptionsResolver $resolver) 166 { 167 $resolver->setDefaults(array( 168 "method" => "GET", 169 "csrf_protection" => false, 170 "validation_groups" => false, 171 )); 172 173 $resolver->setRequired(array( 174 "login_staff", 175 )); 176 } 177 178 /** 179 * {@inheritdoc} 180 */ 181 public function buildView(FormView $view, FormInterface $form, array $options) 182 { 183 $loginStaff = $options['login_staff']; 184 $shop = $options['login_staff']->getShop(); 185 186 // 有効な記事種別 187 if ($loginStaff->isHq()) { 188 // 本部管理画面 189 $view->vars['enabledArticleType'] = array( 190 "" => "全て", 191 "brandevent" => "ブランドイベント", 192 "coordinate" => "コーディネート", 193 "recommend" => "レコメンドアイテム", 194 "diary" => "ダイアリー", 195 "shopevent" => "ニュース", 196 ); 197 } else { 198 // ショップ管理画面 199 $view->vars['enabledArticleType'] = array( 200 "" => "全て", 201 "coordinate" => "コーディネート", 202 "recommend" => "レコメンドアイテム", 203 "diary" => "ダイアリー", 204 "shopevent" => "ニュース", 205 ); 206 } 207 208 // 有効な記事ステータス 209 if ($loginStaff->isHq() or $shop->getApprovalFlg()) { 210 // 本部管理画面 or 承認フラグが有効なショップ管理画面 211 $view->vars["enabledArticleStatus"] = array( 212 "" => "全て", 213 "draft" => "下書き", 214 "pending" => "承認待ち", 215 "reject" => "非承認", 216 "publish" => "公開", 217 "hidden" => "非公開", 218 ); 219 } else { 220 // 承認フラグが無効なショップ管理画面 221 $view->vars["enabledArticleStatus"] = array( 222 "" => "全て", 223 "draft" => "下書き", 224 "publish" => "公開", 225 "hidden" => "非公開", 226 ); 227 } 228 } 229 230 /** 231 * {@inheritdoc} 232 */ 233 public function getName() 234 { 235 return "q"; 236 } 237} 238 239

試したこと

このエラーのよくある原因がphpのバージョンが低い (<5.4)ことのようですが、
PHPのバージョンは5.6.40であり、php -vphpinfo();でもバージョンを確認しております。

補足情報(FW/ツールのバージョンなど)

CentOS 6.7
composer 1.10
symfony 3.0.9
PHP 5.6.40

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

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

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

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

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

guest

回答3

0

このエラーのよくある原因がphpのバージョンが低いことのようですが、

PHPのバージョンは5.6.40であり

いや、5.6はサポートも終わってる「低い」バージョンですよ。
PHPのリリース日とサポート期限

投稿2020/11/05 03:39

m.ts10806

総合スコア80875

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

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

thyda.eiqau

2020/11/05 03:47

トラブルの原因と直接関係あるかは不明ですが、PHP5.6ももちろんのこと、Symfony3.0も古の存在ですね……
youplus40

2020/11/05 04:57

質問の内容が不適切でした。 質問で"低い"と指したはエラーの原因になるバージョン(5.4以下)であることを指しておりました。 質問に追記いたします。 また、php7.2にあげて再度試みましたが、同じエラーが出たため、phpのバージョンが低いため起きていることではないと考えております。
guest

0

new ArticleSearchType::classなんて使い方しないのでここが原因だろうけどArticleSearchTypeを見ない限り外からは分からない。

投稿2020/11/05 04:07

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

youplus40

2020/11/05 04:50

該当クラスのコードを追加しました。ご確認のほど、よろしくお願いいたします。
guest

0

自己解決

symfonyを上げる際に、クラス名などを変更していたのですが、
変更に誤りがあったため、エラーが発生していることがわかりました。
下記のように修正したところ、エラーがなくなりました。

$searchForm = $this->createForm(ArticleSearchType::class, null, array( "action" => $this->generateUrl($this->indexRoute), "login_staff" => $this->getStaff(), ));

投稿2020/11/05 05:10

youplus40

総合スコア19

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問