是否可以在约束验证器中修改节点编辑表单? -- 8 领域 和 nodes 领域 drupal 相关 的问题

Is it possible to modify the node edit form in a constraint validator?


1
vote

问题

中文

是可以在失败约束验证后操作节点编辑表单?

我的方案如下,如果用户尝试保存节点并失败约束验证,则显示验证错误,而且表单中的段落字段应扩展,就像我点击"添加段落" 按钮一样扩展。该段包含2个文本字段,用户只需要填写,以便在再次保存验证通过时。

到目前为止,我设法成功创建了我的约束和约束验证器,然后将约束添加到类型节点的实体。验证正常工作并输出错误消息,但我没有找到将段落追加到字段中的方法,并在表单重新加载时显示它。

此处是我的类中的validate()函数,实现约束validator

    public function validate($value, Constraint $constraint) {     if ($value instanceof NodeInterface) {       $node = $value;       if ('permitting_action' === $node->bundle()) {         // Set last approved date.         $last_approved_date = $this->getLastApprovedDate($node);         $furthest_target_date = $this->projectDateOperation->getFurthestActionCurrentDate($node);         $limit_date = (clone $last_approved_date)->add(DateInterval::createFromDateString('1 day'));         if (!$this->approvedBefore) {           $limit_date->add(DateInterval::createFromDateString('29 day'));         }         if ($furthest_target_date->getTimestamp() > $limit_date->getTimestamp()) {           $reason_date_change_paragraph = Paragraph::create([             'type' => 'reason_for_date_changed',           ]);           $reason_date_change_paragraph->isNew();           $node->get('field_reason_for_pause')->appendItem($reason_date_change_paragraph);           $this->context->buildViolation($constraint->failedValidationMsg, ['%date' => $furthest_target_date->format('m/d/Y')])             ->atPath('field_reason_for_pause')             ->addViolation();         }       }     }   }   

,您可以看到我试图在此播链中添加该段落

  $reason_date_change_paragraph = Paragraph::create([   'type' => 'reason_for_date_changed', ]); $reason_date_change_paragraph->isNew();      $node->get('field_reason_for_pause')->appendItem($reason_date_change_paragraph);   
英文原文

Is it possible to manipulate the node edit form after it fails a constraint validation?

My scenario is as follows if a user attempts to save a node and fails the constraint validation a validation error is displayed, but also a paragraph field in the form should expand as if I clicked the "Add paragraph" button. The paragraph contains 2 text fields which a user just needs to fill out so that when they save again the validation passes.

So far I've managed to successfully create my constraint and constraint validator then added the constraint to entity of type node. The validation is working properly and outputting the error message, but I have not found a way to append a paragraph into the field and have it displayed when the form reloads.

Here is my validate() function in my class that implements ConstraintValidator

  public function validate($value, Constraint $constraint) {     if ($value instanceof NodeInterface) {       $node = $value;       if ('permitting_action' === $node->bundle()) {         // Set last approved date.         $last_approved_date = $this->getLastApprovedDate($node);         $furthest_target_date = $this->projectDateOperation->getFurthestActionCurrentDate($node);         $limit_date = (clone $last_approved_date)->add(DateInterval::createFromDateString('1 day'));         if (!$this->approvedBefore) {           $limit_date->add(DateInterval::createFromDateString('29 day'));         }         if ($furthest_target_date->getTimestamp() > $limit_date->getTimestamp()) {           $reason_date_change_paragraph = Paragraph::create([             'type' => 'reason_for_date_changed',           ]);           $reason_date_change_paragraph->isNew();           $node->get('field_reason_for_pause')->appendItem($reason_date_change_paragraph);           $this->context->buildViolation($constraint->failedValidationMsg, ['%date' => $furthest_target_date->format('m/d/Y')])             ->atPath('field_reason_for_pause')             ->addViolation();         }       }     }   } 

As you can see I'm attempting to add the paragraph in this snippet

$reason_date_change_paragraph = Paragraph::create([   'type' => 'reason_for_date_changed', ]); $reason_date_change_paragraph->isNew();      $node->get('field_reason_for_pause')->appendItem($reason_date_change_paragraph); 
     

回答列表

相关问题

0  通过AJAX更新实体/发布数据?  ( Updating entities posting data via ajax ) 
我有一个需要更新用户交互的实体,例如: 跟踪用户通过视频进行进度,使得侦听器每x秒检查播放头位置,并将信息发布到包含该视频上的用户在该视频上的进度的数据的实体。 复选框的集合,当单击时,自动更新相关实体上相应值的状态。为了参数,我尚不知道这是否是实际实体表单或通用形式/组形式。 在过去我尝试过#1通过...

5  以编程方式执行节点搜索  ( Programmatically executing a node search ) 
是否可以以编程方式执行节点搜索?也许通过 nodesearch 或 drupal search ? 最接近的我可以得到以编程方式做诸如: Drupal::service('search.index')->clear(); echo Drupal::service('plugin.manager.search...

1  如何在Ajax视图的公开日期过滤器中更改日期格式,该过滤器使用Bef?  ( How to change date format in an ajax views exposed date filter that uses bef ) 
我有一个使用ajax选项的视图,并使用带有更好的暴露过滤器(最新版本)的一些日期过滤器。我想做的是将日期过滤器的默认日期格式从mm / dd / yy更改为dd / mm / yy。 我试图实现这个解决方案。格式更改,弹出窗口工作正常,但在应用过滤器时出现问题,似乎日期过滤器值似乎没有验证。 如何在AJAX视图中更改...

0  测试保存某些配置的函数 - NULL上调用设置的错误  ( Testing a function which save some configuration error called set on null ) 
我有一个2-3件事的函数,其中一个活动是保存配置。 function processProps($data) { $config = $this->configFactory->getEditable('mymodule.settings'); $config ->set('some_settin...

0  如何从Ajax表单中保存实体  ( How to save entity from a ajax form ) 
我正在运行drupal 8.8.x 问题 在通过AJAX提交表单时,未保存实体。示例: 构建形式 public function buildForm(array $form, FormStateInterface $form_state, EntityInterface $entity = NULL) ...

0  Hook_Node_Presave期间如何重新排序实体引用版本字段?  ( How do you reorder an entity reference revisions field during hook node presave ) 
我正在尝试根据节点保存的文本字段重新排序一些段落,因此作者不需要手动维护字母顺序,但是当我保存节点时,所有值都丢失。我尝试匹配$ node-> get('field_paragraphs') - > getValue(),但这似乎没有工作。 function mymodule_node_presave...

0  如何将来自DrupalSettings的变量的值传递给同一页面中的iframe?  ( How can you pass the value of a variable from drupalsettings to an iframe in the ) 
我在drupal设置中有一个变量,从php获得它的值。 (function ($, Drupal, drupalSettings) { /** * @namespace */ Drupal.behaviors.pdf_appAccessData = { attach: function (cont...

0  用分类权重排序  ( Sort by taxonomy weight ) 
我有一个内容类型"成员" ,带有一个名为"成员角色" 的分类术语,它是一个多价值字段。每个成员最多可包含3个成员角色。 我已经创建了一个视图,以参考分类场与分类学术语重量排序的成员。但问题是每个成员在视图结果页面中重复3次。 我的问题是如何删除重复项,并且仅在多价字段(成员角色)中的最后一个值排序。 ...

0  如何将jQuery验证添加到自定义表单并将错误设置为字段?  ( How to add jquery validation to custom form and set error to field ) 
我想在我的自定义表单上使用jQuery实现客户端验证。 我已经启用了客户端验证贡献模块 我已使用以下代码成功附加了自定义JS文件: mysql> select nid, uid, created, changed from node; +-----+-----+------------+------------+...

2  使用PathAuto <8.x-1.6升级后,网站已损坏  ( Site broken after upgrading with pathauto 8 x 1 6 ) 
我最近升级到Drupal 8.8。不幸的是,我错过了需要升级PathaUto的备忘录,现在我的网站被打破了。大多数页面给出了消息"网站遇到意外错误。请稍后再试。" 我可以到达/用户并使用管理员帐户登录,我可以得到/ update.php,告诉我"pathauto模块与Drupal Core的当前版本不兼容。将Pat...

0  从自定义块中消耗外部API  ( Consume external api from custom block ) 
我目前正在编写一个自定义模块 - 用于 drupal 8 - 如何使用块(使用块显示它们并显示它们)来进行消费/发送外部API数据强> 是标准方法 - 直接或通过控制器通过插件消耗/发送外部API数据,并将其输出到Twig模板? 如果是的话,如何将数据从控制器发送到自定义插件块? 欢迎任何建议。谢谢你。 ...

2  如何在自定义字段中使用替换模式?  ( How can i use a replacement pattern in a custom field ) 
我刚刚在视图中创建了一个新的自定义字段,但我想在该字段中使用替换模式。是否有可能这样做? class CustomButtonField extends FieldPluginBase { /** * {@inheritdoc} */ public function usesGroupBy(...

0  如何在复合组件中的组件上设置验证错误?  ( How do i set a validation error on a component inside a composite component ) 
我有一个webform,一个复合组件允许添加多行。这种结构是这样的,因为它更清楚: webform. sample_details - 复合组件,允许多个"行" ,包含: sample_ref. date_sampled(字段我想要设置错误) 我遵循"方法2 - WebForm处理程序"...

0  只在首页上完全显示最近的帖子,其他人  ( Fully display only most recent post on front page furl the others ) 
目前我的首页只会为我所有新帖子显示一款预告片。 我知道我可以转到 Structure > Views > Frontpage 并将其更改为 show Content | Full ,它将在首页上显示每个帖子的完整帖子。 我想做的是,虽然只是我最近的帖子的全部帖子,然后是所有其他帖子的速度。 是可以这样做吗? ...

1  如何在多站安装中使用一组全局和每个子部分权限?  ( How to use a set of global and per subsite permissions in a multisite installati ) 
用例: 我有一个多功能安装,其中我想定义所有子部门可用的全局配置。我在 default 站点中定义此配置。对于这个例子,让我们说是: 一个角色编辑器 内容类型文章 内容类型页面 现在.. 在所有子区域中,角色编辑器需要有权"使用工具栏" 。全球许可。 在 subsite-a 中,我想允许编辑器只添加...

2  使用#states以复选框  ( Using states in a form with checkboxes ) 
我想当客户端检查一个复选框时,会出现文本字段。示例:如果他点击3个复选框,则为3的所有文本字段都会关闭。 我的#Checkboxes: $form['input']['livraison'] = [ '#title' => t('Options de livraison (à la charge de...

0  不要缓存自定义前页域  ( Dont cache custom front page domain ) 
我正在研究一个模块,该模块显示每个角色不同的FrontPage。我有三个FrontPages: 基本 www.domain.nl anonymous 用户,在基本站点设置中设置 为 role_1 他们转到 sub1.domain.nldashboard 为具有 role_2 他们转到 sub2.domain....

2  创建/编辑节点时如何将字段添加到侧栏菜单?  ( How do i add fields to the sidebar menu when creating editing nodes ) 
我想在Create / Edit节点页面上添加到侧栏菜单。我该怎么办? 我想这样做,以使内容创建/编辑一个小清洁器,更容易理解内容编辑器。 见附加图片... 谢谢。 ...

0  在模态对话框中从表单处理数据  ( Handling data from form in modal dialog ) 
我正在构建一个包含几个点击区域的工具。每个区域都有一个与 theme/template.php5 指向自定义表单路由的链接。 一切正常工作,我能够从表单中获取数据并存储它。然而,我需要用户在这种模态形式中的选择来反映在他们最初单击的区域中。 我忘记了在localstorage或其他东西中存储他们的选择并在关闭每个模...

0  在主和中学和次级语言之间或只是显示错误的URL翻译  ( Url translations transposing between primary and secondary languages or just dis ) 
我们有一个drupal 8.7.10网站,多语言(17个国家,每个人都有2种或更多语言)。 在我附加的例子中,我们有一个"人们" 页面,我们在这个国家列出了我们公司的人。 URL路径应显示"Insalar" 而不是土耳其土耳其翻译的"人民" 。路径的表单字段显示正确。但"查看" 选项卡以及管理员列表中的列表显示"人员...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.