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

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

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

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

Twig

Twig は、簡潔で可読性の高いテンプレートを記述することができ、 シンプルに記述することを目的として作られた PHPテンプレートエンジンです。

EC-CUBE

EC-CUBEは、主に日本国内で開発されているECコンテンツ管理システムです。ロックオン社のECKitを元にしてオープンソース化され、商品管理・受注管理・顧客管理・売上集計などECに特化した様々な機能を備えています。

Q&A

解決済

2回答

1153閲覧

EC-CUBE3のプラグイン開発、オリジナルメニューが表示されない

poipo

総合スコア13

PHP

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

Twig

Twig は、簡潔で可読性の高いテンプレートを記述することができ、 シンプルに記述することを目的として作られた PHPテンプレートエンジンです。

EC-CUBE

EC-CUBEは、主に日本国内で開発されているECコンテンツ管理システムです。ロックオン社のECKitを元にしてオープンソース化され、商品管理・受注管理・顧客管理・売上集計などECに特化した様々な機能を備えています。

0グッド

0クリップ

投稿2018/03/26 07:52

編集2018/03/26 12:51

前提・実現したいこと

EC-CUBE3のプラグインでオリジナルメニューの表示。

現在はオリジナルメニューの追加までできていて、メニューを選択するとエラーになります。

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

Twig_Error_Runtime in Template.php line 487: Variable "form" does not exist in "__string_template__283ef8214125d3fcd7d25d73043851d03dcdefbc05ff095ca850bb1d87f8358f" at line 8.

該当のソースコード

serviceprovider.php

php

1 2public function register(BaseApplication $app) 3 { 4 // 独自コントローラ 5$app->match('admin/plugin/categorycontent/hello', 'Plugin\CategoryContent\Controller\CategoryContentController::index')->bind('plugin_CategoryContent_hello'); 6 7$app['config'] = $app->share($app->extend('config', function ($config) 8 { $config['nav'][0]['child'][] = array( 9'id' => 'categorycontent', 'name' => '規格登録', 'url' => 'plugin_CategoryContent_hello', 10); 11return $config; })); 12 13 14$app['form.types'] = $app->share($app->extend('form.types', function ($types) use ($app) { 15$types[] = new CategoryContentConfigType(); 16return $types; 17})); 18 19} 20

controller.php

php

1public function index(Application $app, Request $request) 2 { 3    $form->handleRequest($request); 4    if ($form->isSubmitted() && $form->isValid()) { 5    $data = $form->getData(); 6    } 7    return $app->render('CategoryContent/Resource/template/admin/config.twig', array( 8    'form' => $form->createView(), 9    )); 10 11 }

twigテンプレートはジェネレータで作成したものをそのまま使っています。

オリジナルメニューのURLは
http://ドメイン/html/admin/plugin/categorycontent/hello
になっています。

ご教示いただければと思います。何卒よろしくお願いいたします。

###追加
config.twig

php

1{% extends 'default_frame.twig' %} 2 3{% set menus = ['store', 'plugin', 'plugin_list'] %} 4 5{% block title %}CategoryContent画面{% endblock %} 6{% block sub_title %}CategoryContent設定{% endblock %} 7 8{% form_theme form 'Form/bootstrap_3_horizontal_layout.html.twig' %} 9 10{% block main %} 11 <form class="form-horizontal" method="post" action="{{ url('plugin_CategoryContent_config') }}"> 12 {{ form_widget(form._token) }} 13 <div class="row" id="aside_wrap"> 14 <div class="col-md-9"> 15 <div class="box"> 16 <div class="box-header"> 17 <h3 class="box-title">CategoryContent設定</h3> 18 </div><!-- /.box-header --> 19 <div class="box-body form-horizontal"> 20 {{ form_row(form.name) }} 21 </div><!-- /.box-body --> 22 </div><!-- /.box --> 23 </div><!-- /.col --> 24 <div class="col-md-3" id="aside_column"> 25 <div id="common_box" class="col_inner"> 26 <div id="common_button_box" class="box no-header"> 27 <div id="common_button_box__body" class="box-body"> 28 <div id="common_button_box__edit_button" class="row text-center"> 29 <div class="col-sm-6 col-sm-offset-3 col-md-12 col-md-offset-0"> 30 <button class="btn btn-primary btn-block btn-lg" type="submit">設定</button> 31 </div> 32 </div> 33 </div><!-- /.box-body --> 34 </div><!-- /.box --> 35 </div> 36 </div><!-- /.col --> 37 </div> 38 </form> 39{% endblock main %}

フォーム
CategoryContentConfigType.php

php

1class CategoryContentConfigType extends AbstractType 2{ 3 public function buildForm(FormBuilderInterface $builder, array $options) 4 { 5 6 $builder 7 ->add( 8 'name', 9 'text', 10 array( 11 'constraints' => array( 12 new Assert\NotBlank(), 13 ), 14 ) 15 ) 16 ->add( 17 'code', 18 'text', 19 array( 20 'constraints' => array( 21 new Assert\NotBlank(), 22 ), 23 ) 24 ); 25 26 27 28 } 29 30 public function getName() 31 { 32 return 'categorycontent'; 33 } 34 35 36}

##controller変更後
エラー

php

1 2ContextErrorException in CategoryContentController.php line 30: 3Notice: Undefined variable: form

controller

php

1public function index(Application $app, Request $request) 2 { 3 $form->handleRequest($request); 4 5 if ($form->isSubmitted() && $form->isValid()) { 6 $data = $form->getData(); 7 8 9 } 10 return $app->render('CategoryContent/Resource/template/admin/config.twig', array( 11 'form' => $form->createView(), 12 )); 13 }

##controller追記
エラー内容

php

1//1つめ 2Twig_Error_Runtime in Template.php line 230: 3An exception has been thrown during the rendering of a template ("User Warning: Unable to generate a URL for the named route "plugin_CategoryContent_config" as such route does not exist.") in "__string_template__283ef8214125d3fcd7d25d73043851d03dcdefbc05ff095ca850bb1d87f8358f" at line 11. 4 5//2つめ 6ContextErrorException in EccubeExtension.php line 172: 7User Warning: Unable to generate a URL for the named route "plugin_CategoryContent_config" as such route does not exist.

controller

php

1 public function index(Application $app, Request $request) 2 { 3 4 $form = $app['form.factory'] 5 ->createBuilder('categorycontent') 6 ->getForm(); 7 8 $form->handleRequest($request); 9 10 if ($form->isSubmitted() && $form->isValid()) { 11 $data = $form->getData(); 12 13 14 } 15 return $app->render('CategoryContent/Resource/template/admin/config.twig', array( 16 'form' => $form->createView(), 17 )); 18 }

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

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

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

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

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

xenbeat

2018/03/26 08:17

twigのエラーっぽいのでtwigファイルも記載しましょう。あと質問へのタグ(twig)付けも忘れずに!
xenbeat

2018/03/26 08:21

あとformクラスも。
poipo

2018/03/26 08:26

ありがとうございます。今修正しました
xenbeat

2018/03/26 09:23

何かを修正して状況が変わったなら質問にも反映してください。
xenbeat

2018/03/26 09:26

あとECCUBEの質問でもソースコードレベルの質問をされるのであれば「Silex」や「Symfony」のタグも追加されると有益な回答が集まりやすいと思います。
xenbeat

2018/03/26 10:05 編集

追記されたControllerのコードですが、リクエスト受け取ってデータを受け取るだけで止まっているのですが その先の処理は(データベースへの登録処理等)スコープ外という認識で良いでしょうか。 現時点ですと、質問粒度が大きく、ゴールが曖昧なので、今のエラーを解消しても次のエラーが発生するなど場当たり的ですごく大掛かりなやり取りとなってしまいます。 例えば、「画面にフォームを表示する」「画面から受け取ったフォームデータを検証する」「検証済みデータをデータベースに登録する」等の一連の処理がわからないのであれば、質問を分割して質問の粒度を小さくしていただければ個人的に回答し易いですし、回答も集まりやすいと思います。
xenbeat

2018/03/26 10:10 編集

長くなりましたが、つまり、この質問に「画面にフォームを表示するor出来たらクローズする」みたいなゴールを明記頂きたいです。今のソースコード的に、発生しているエラーを解消しても、追加質問が目に見えているから言っています。
poipo

2018/03/26 11:05

ご返信感謝致します。ゴールはフォームの表示になります、DBへの処理は含みません。これで表示さえできればクローズとさせて頂きたいと考えています。よろしくお願い致します。
guest

回答2

0

ベストアンサー

現状的に一発回答は難しいですが、フォームの表示までお付き合いできれば思います。
さて、現時点のエラーは「formという変数が定義されていません」というエラーになります。
なので、$form->handleRequest($request);の手前で以下のようにフォームを生成してあげれば、今のエラーは解消できるかと思います。

$form = $app['form.factory'] ->createBuilder('categorycontent') ->getForm();

投稿2018/03/26 11:41

xenbeat

総合スコア4258

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

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

poipo

2018/03/26 12:59

ありがとうございます、追加後エラー内容がかわりました。 質問内容にcontrollerのエラーを追記しました 1つ目のtwigのエラーがわからず2つ目はserviceproviderの修正が必要なのかなと推測するレベルです。お手間をとらせてしまい申し訳ありません。
poipo

2018/03/26 14:58

twigテンプレートのformの送信先urlを変えるとエラーが変わり、今度は{% form_theme form 'Form/bootstrap_3_horizontal_layout.html.twig' %}の部分でエラーがでたので削除したところ画面が表示されました。 とりあえず表示まではできたので今回はクローズとさせていただきます。 ありがとうございました。
xenbeat

2018/03/26 15:13

レス遅くなりました。。。 画面表示されてよかったです! > 1つ目のtwigのエラーがわからず2つ目はserviceproviderの修正が必要なのかなと推測するレベルです。 →こちらはルーティング「plugin_CategoryContent_config」が以下でbindされていないことが原因かと思います。 https://github.com/EC-CUBE/ec-cube/blob/master/src/Eccube/ControllerProvider/AdminControllerProvider.php > {% form_theme form 'Form/bootstrap_3_horizontal_layout.html.twig' %}の部分でエラーがでた →こちらに関しては現時点の情報では判断できかねます。 しかし、こちらはフォームにbootstrap3を適用するだけのテーマのようなので、一旦ここの見た目の部分は無視して、まずは機能を実装されるのが良いかと思います!
guest

0

return $app->render('CategoryContent/Resource/template/admin/config.twig');

return $app->render('CategoryContent/Resource/template/admin/config.twig',[ 'form' => /* require form object */$form ]);

投稿2018/03/26 08:29

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

poipo

2018/03/26 08:43

ありがとうございます $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $data = $form->getData(); } return $app->render('CategoryContent/Resource/template/admin/config.twig', array( 'form' => $form->createView(), )); としたところ ContextErrorException in CategoryContentController.php line 30: Notice: Undefined variable: form とでました $form->handleRequest($request); この部分です $fromに関するエラーだと思いますが修正すべき箇所がわかっていません。。
退会済みユーザー

退会済みユーザー

2018/03/26 09:13

ECCUBE 自体にそこらへんのドキュメントがなかったとおもうから コアでつかっている silex のドキュメント https://silex.symfony.com/doc/2.0/providers/form.html を参照して $form を作成してくだしあ
poipo

2018/03/26 09:29

ありがとうございます、目を通してみます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問