Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >无法获得Twig的输入值

无法获得Twig的输入值
EN

Stack Overflow用户
提问于 2020-02-19 08:23:13
回答 2查看 892关注 0票数 0

你好,我试图传递一些参数,但我不知道如何获得输入的价值,这里是我的代码:好的,首先,im使用这个详细信息显示博客细节,它还提供一个表单来向博客添加评论;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public function detailsAction(Request $request,Blog $blog){

        $user=$this->getUser();
        if($user==null)
            return $this->redirectToRoute('fos_user_security_login');
        $add_comment = new CommentaireBlog();
        $em = $this->getDoctrine()->getManager();

        $comments = $em->getRepository(CommentaireBlog::class)->findByBlog($blog);
        $add_comment->setBlog($blog);
        $add_comment->setUser($user);
        $add_comment->setDate( new \DateTime());

        $form = $this->createFormBuilder($add_comment)

            ->add('contenu', TextareaType::class)

            ->getForm();

        if ($request->getMethod() == 'POST') {
            $form->handleRequest($request);

            if ($form->isSubmitted() && $form->isValid()) {
                $add_comment = $form->getData();
                $em = $this->getDoctrine()->getEntityManager();
                $em->persist($add_comment);
                $em->flush();

                return $this->redirectToRoute('blog_details', array('id' => $blog->getId()));
            }
        }


        return $this->render('blog/details.html.twig', array(
            'form' => $form->createView(),
            'comment' => $add_comment,
            'blog' => $blog,
            'comments'=>$comments,
        ));

    }

小枝页:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   {{ form_start(form) }}
                                <div class="row form-group">

                                    <div class="col col-md-3"><label class=" form-control-label">Votre Commentaire  </label></div>
                                    <div class="col-12 col-md-9"> {{ form_widget(form.contenu, { 'attr': {'class': 'form-control'} }) }}<small class="form-text text-muted"></small></div>
                                    <button type="submit" class="btn btn-default">Envoyer</button>
                                    <div class="col-12 col-md-9">
                                    </div>
                                </div>
                                    {{ form_end(form) }}

现在,我想做的是,在某人添加了一条评论和它的(种族主义/滥用)之后。另一个用户可以报告评论,然后发送邮件,所以我使用了reportAction,它使用三个参数--消息和注释id的原因

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public function reportAction($msg,$type,$id)
    {

    }

我仍然没有在它里面写,因为首先我需要输入的值,所以我去了细枝页,我做了这个小表单来获取输入,但是idk,如何得到这个值,这里是表单:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div class="modal-body">
  <form id="lala" method="GET">
    <label for="cars">Reason:</label>
            <select id="reportreason">
                <option value="Inappropriate Content">Inappropriate Content</option>
                 <option value="Spam">Spam</option>
                <option value="Racism">Racism</option>
                <option value="Nudity">Nudity</option>
                 <option value="Other">Other</option>
      </select>
    <div class="form-group">
        <label for="message-text" class="col-form-label">Message:</label>
        <textarea id="reportmessage" class="form-control" id="message-text"></textarea>
    </div>
  </form>
</div>
 <div class="modal-footer">
    <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
    <a id="reportlink" href="{{ path('comment_report', { 'msg': form.vars.data.reportmessage ,'type': form.vars.data.reportreason, 'id': comment.id  }) }}" type="button" class="btn btn-primary">Send message</a>
</div>

这是yml文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
blog_details:
    path:      /{id}/details
    defaults: { _controller: "BlogBundle:Blog:details" }
    methods:  [GET, POST]
comment_report:
    path:     /{msg}/{type}/{id}/report
    defaults: { _controller: "BlogBundle:Blog:report" }
    methods:  [GET, POST]

但是我现在得到了这个错误:属性"reportmessage“或方法"reportmessage()”、"getreportmessage()"/"isreportmessage()“或"__call()”都不存在,并且在类"BlogBundle\Entity\CommentaireBlog“中没有公共访问权。

那么,我如何才能得到输入的价值使用树枝?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-19 10:55:32

细枝对象语法https://twigfiddle.com/01iobj

实际上,小枝错误消息是在您的path()参数中传递一个没有关联键的对象(如{value} ),正确的语法将是{key: value}[value],类似于JSON语法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{ 
   "key1": { "key1a": "value1a" }, 
   "key2": ["value2"], 
   "key3": "value3" 
}

结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$_GET = array(
    'key1' => array('key1a' => 'value1a'), 
    'key2' => array('value2'), 
    'key3' => 'value3'
);

另一种方法

看看你想做什么,你需要重构你的方法。

首先,只更改您的控制器批注。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
blog_details:
    path:      /{id}/details
    defaults: { _controller: "BlogBundle:Blog:details" }
    methods:  [GET, POST]
comment_report:
    path:     /{comment}/report
    defaults: { _controller: "BlogBundle:Blog:report" }
    methods:  [POST]

接下来,为您的模式创建一个表单实例,这将允许您在其他地方使用FormInstance来呈现和验证提交的表单。确保所有的验证都发生,并且不必为同一表单更新不同的脚本。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* /src/Form/CommentReportForm.php */

namespace App\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type as Form;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints as Assert;

class CommentReportForm extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
         $builder
             ->add('reason', Form\ChoiceType::class [
                'choices' => [
                     'Inappropriate Content' => 'Inappropriate Content',
                     'Spam' => 'Spam',
                     'Racism' => 'Racism',
                     'Nudity' => 'Nudity',
                     'Other' => 'Other'
                ]
            ])
             ->add('message', Form\TextType::class, [
                'constraints' => [
                    new Assert\Length(['min' => 10]),
                    new Assert\NotBlank(),
                ],
            ]);
    }

    public function getBlockPrefix()
    {
       return 'report_comment_form';
    }
}

接下来,相应地更新您的Controller操作。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public function detailsAction(Request $request, Blog $blog)
{
    if (!$user = $this->getUser()) {
        //this should be handled in your firewall configuration!!!!
        return $this->redirectToRoute('fos_user_security_login');
    }
    $em = $this->getDoctrine()->getManager();

    $add_comment = new CommentaireBlog();
    $add_comment->setBlog($blog);
    $add_comment->setUser($user);
    $add_comment->setDate(new \DateTime());

    $form = $this->createFormBuilder($add_comment)
        ->add('contenu', TextareaType::class)
        ->getForm();
    $form->handleRequest($request);
    if ($form->isSubmitted() && $form->isValid()) {
        //Symfony form sets values for the model by_reference
        $em->persist($add_comment);
        $em->flush();

        return $this->redirectToRoute('blog_details', array('id' => $blog->getId()));
    }

    /*
    * create the report form
    */
    $reportForm = $this->createForm(\App\Form\CommentReportForm::class);
    $reportForm->handleRequest($request);

    return $this->render('blog/details.html.twig', array(
        'form' => $form->createView(),
        'comment' => $add_comment,
        'blog' => $blog,
        'comments'=> $em->getRepository(CommentaireBlog::class)->findByBlog($blog),
        /*
         * give the report form a different name in twig
         */
        'report_form' => $reportForm->createView(),
    ));

}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public function reportAction(Request $request, CommentaireBlog $comment)
{
    $reportForm = $this->createForm(\App\Form\CommentReportForm::class);
    $reportForm->handleRequest($request);
    /** @var array|string[message, reason] */
    $reportData = $reportForm->getData();
    /*
      array( 'reason' => 'value', 'message' => 'value' )
     */
    dump($reportData);
    if ($reportForm->isSubmitted() && $reportForm->isValid()) {
        //send email

        //redirect to success message
    }
    //display an error message
}

最后,更新您的视图以支持您的模式中的新表单。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div class="modal-body">
  {{ form_start(report_form, { action: path('comment_report', { comment: comment.id }) })
  {{ form_label(report_form.reason) }}
  {{ form_widget(report_form.reason) }}
  <div class="form-group">
      {{ form_label(report_form.message) }}
      {{ form_widget(report_form.message) }}
  </div>
  {{ form_end(report_form) }}
</div>
<div class="modal-footer">
    <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
    <button type="submit" class="btn btn-primary">Send message</button>
</div>

作为一项建议,我强烈敦促你将提交的报告记录在数据库中,作为案件日志和报告的状态。我的方法将使您获得大部分的方式,您只需要创建您的App\Entity\CommentReport实体,与CommentaireBlog实体有一个可选的关联。它将传递给表单,并将data_class添加到表单选项解析器中,模拟您在其他数据库表单中所做的工作。

票数 1
EN

Stack Overflow用户

发布于 2020-02-19 08:50:34

我不知道为什么会这样编写path调用,但是对于您想要在路由中使用的变量,不应该有任何方括号。以下代码应该有效:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<a 
  href="{{ path('comment_report', { 'msg': form.reportmessage.value ,'type': form.reportreason.value, 'id': comment.id  }) }}" 
  type="button"
  class="btn btn-primary">
     Send message
</a>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60304863

复制
相关文章
Ubuntu“无法获得锁”解决方案(E: 无法获得锁 /var/cache/apt/archive)
[scode type="yellow"]Ubuntu “无法获得锁”解决方案(E: 无法获得锁 /var/cache/apt/archive)[/scode]
乐心湖
2020/07/31
1.8K0
PHP使用Twig
在网站开发过程中模版引擎是必不可少的,PHP中用的最多的当属Smarty了。目前公司系统也是用的Smarty,如果要新增一个页面只需把网站的头、尾和左侧公共部分通过Smarty的include方式引入进来,然后主体部分写内容即可,用起来也是相当方便。这也是一种比较通用的做法。但维护一段时间后发现有些凌乱了:
用户7657330
2020/08/14
1.8K0
E: 无法获得锁 /var/lib/dpkg/lock
Ubuntu下很常见的问题,标记一下。 u1@node:~# sudo apt-get install -y mysql-client mysql-server E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它? u1@node:~# sudo apt-get install -y mysql-client mysql-server E: 无法获得锁 /var/lib/dpkg/l
程裕强
2022/05/06
4420
wpf PreviewTextInput 在鼠标输入获得 
我的小伙伴在写一个功能,需要获得输入的时候,判断是键盘输入或鼠标输入,通过 PreviewTextInput 获得键盘输入就做一些输出。 但是他发现,在使用鼠标书写的时候,获得 PreviewTextInput ,而且值是 \u0003 ,他换了一个电脑就好了。
林德熙
2018/09/18
9720
ExaGrid获得+73的净推荐值
马萨诸塞州韦斯特伯鲁–(美国商业资讯)–备份用超融合二级存储器领先供应商ExaGrid®今日宣布,在近日开展的净推荐值(NPS)调查中,该公司的NPS为+73。
全栈程序员站长
2022/09/06
6980
input 手机端 无法输入
input标签添加style=“-webkit-user-select: auto;”
全栈程序员站长
2022/08/09
1.8K0
JavaScript 判断输入的值为数字
使用js自带全局函数isNaN(), isNaN()返回一个Boolean值,如下 :
Devops海洋的渔夫
2019/06/02
3.5K0
Android EditText 获得输入焦点 以及requestfocus()失效的问题
 最近做公司项目的时候,经常会遇到一个问题,就是我为某个控件如EditText设置requestfocus()的时候不管用,比如说登陆的时候,我判断下用户输入的密码,如果正确就登陆,错误就提示密码错误,并且输入框获取焦点,但是实际中确不起作用 package com.example.hfs.requestfocusdemo; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import andr
庞小明
2018/03/08
3.1K0
POH和POV事件获得屏幕字段的值
在SCREEN显示之前,系统会自动将程序变量值存放到屏幕字段中:在PAI事件中,系统会自动将屏幕字段的值更新到相应的程序变量中。 在SCREEN LOGIC中我们还有POH和POV事件,所以需要调用DYNP_VALUES_READ函数来读取屏幕字段值。
秋白
2022/06/23
1.1K0
input number 数字输入限制,最大值最小值输入范围限制
方式一:max="100" min="10" 这种方式限制的是数字输入框右边的增减箭头按钮,最大值和最小值,不能对手动输入的数进行限制。如果手动输入一个大于100或小于10的数,还是无法限制。 <input type="number" max="100" min="10" value=""> 方式二:oninput // 只限制长度:输入四位数的数字 <input type="number" oninput="if(value.length>4)value=value.slice(0,4)" />
acoolgiser
2022/03/07
16.8K0
Android-无法获得Service内容-Service通信
当程序通过startService()和stopService()启动、关闭Service时Service与访问者不存在太多关联,因此service与用户之间无法进行通信、交换数据。
圆号本昊
2021/09/24
7850
Android-无法获得Service内容-Service通信
WPF 获得当前输入法语言区域
参见 C#: Get current keyboard layout\input language
林德熙
2019/03/13
1.3K0
WPF 获得当前输入法语言区域
WPF 获得当前输入法语言区域
参见 C#: Get current keyboard layout\input language
林德熙
2022/08/04
9420
如何获得当前数据库的SCN值
Last Updated: Thursday, 2004-12-02 15:04 Eygle
数据和云01
2018/09/10
1.8K0
win10 uwp 获得Slider拖动结束的值
本文讲的是如何获得Slider移动结束的值,也就是触发移动后的值。如果我们监听ValueChanged,在我们鼠标放开之前,只要拖动不放,那么就不停触发,而我们可能要得到事件是拖动结束后,那么我们如何获得。
林德熙
2022/08/09
6220
win10 uwp 获得Slider拖动结束的值
本文讲的是如何获得Slider移动结束的值,也就是触发移动后的值。如果我们监听ValueChanged,在我们鼠标放开之前,只要拖动不放,那么就不停触发,而我们可能要得到事件是拖动结束后,那么我们如何获得。
林德熙
2018/09/18
9540
win10 uwp 获得Slider拖动结束的值
本文讲的是如何获得Slider移动结束的值,也就是触发移动后的值。如果我们监听ValueChanged,在我们鼠标放开之前,只要拖动不放,那么就不停触发,而我们可能要得到事件是拖动结束后,那么我们如何获得。
林德熙
2019/03/13
9060
python测试开发django-186.使用 jquery 的 .val() 无法获取input框的输入值(已解决)
在使用 jquery 可以定位到元素, input框也输入了值,但是用.val()无法获取到输入框的值。
上海-悠悠
2022/01/10
2.8K0
python测试开发django-186.使用 jquery 的 .val() 无法获取input框的输入值(已解决)
点击加载更多

相似问题

无法获得输入的值

210

无法获得输入值JavaScript

10

ionicPopup无法获得输入值

23

jQuery无法获得输入值

21

无法获得“输入”元素的值。

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文