小编alt*_*aus的帖子

如何动态控制表单的验证?

我在Symfony的表单验证处理方面遇到了一些问题.我想基于其数据验证绑定到实体的表单.有很多信息如何使用FormEvents 动态修改表单字段.我在这个主题上缺少的是如何控制/修改验证.

我简化的用例是:

  1. 用户可以将事件添加到日历.
  2. 验证检查是否已有事件.
  3. 如果发生冲突,验证将引发错误.
  4. 用户现在应该能够忽略此错误/警告.

验证实现为ValidatorConstraint::CLASS_CONSTRAINT作为目标(因为它是采取一些更多的东西进去).

我试过了:

  • 浏览验证组,但找不到实体范围验证器的访问权限.
  • 围绕FormEvents并添加一个额外的字段,如"忽略日期警告".
  • 浏览提交按钮,将其更改为"强制提交".

......但从未找到有效的解决方案.使用基于单个属性的验证器的更简单的黑客攻击也无法解决问题.:(

是否有Symfony方式来动态控制验证?

编辑:我的代码如下所示:

use Doctrine\ORM\Mapping as ORM;
use Acme\Bundle\Validator\Constraints as AcmeAssert;

/**
 * Appointment
 *
 * @ORM\Entity
 * @AcmeAssert\DateIsValid
 */
class Appointment
{
  /**
   * @ORM\Column(name="title", type="string", length=255)
   *
   * @var string
   */
  protected $title;

  /**
   * @ORM\Column(name="date", type="date")
   *
   * @var \DateTime
   */
  protected $date;
}
Run Code Online (Sandbox Code Playgroud)

验证器用作服务:

use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
/**
 * Validates the date of …
Run Code Online (Sandbox Code Playgroud)

forms validation symfony symfony-2.5

14
推荐指数
1
解决办法
5013
查看次数

使用FileProvider在Android N上打开下载的文件

由于FileProvider的更改,我必须修复我们的Android N应用程序.我基本上已经阅读了关于这个主题的所有内容,但我找不到任何解决方案.

这是我们之前的代码,它从我们的应用程序开始下载,将它们存储在Download文件夹中,并调用一个ACTION_VIEW意图作为soons,DownloadManager告诉他已完成下载:

BroadcastReceiver onComplete = new BroadcastReceiver() {
    public void onReceive(Context ctxt, Intent intent) {
        Log.d(TAG, "Download commplete");

        // Check for our download
        long referenceId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
        if (mDownloadReference == referenceId) {
            DownloadManager.Query query = new DownloadManager.Query();
            query.setFilterById(mDownloadReference);
            Cursor c = mDownloadManager.query(query);
            if (c.moveToFirst()) {
                int columnIndex = c.getColumnIndex(DownloadManager.COLUMN_STATUS);
                if (DownloadManager.STATUS_SUCCESSFUL == c.getInt(columnIndex)) {
                    String localUri = c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
                    String fileExtension = MimeTypeMap.getFileExtensionFromUrl(localUri);
                    String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(fileExtension);

                    if (mimeType != null) {
                        Intent …
Run Code Online (Sandbox Code Playgroud)

android android-fileprovider android-7.0-nougat

11
推荐指数
2
解决办法
2万
查看次数

[Symfony][Form] 仅当属性发生更改时才将验证器/约束添加到属性中

我有以下场景:我正在验证约会,并且有一个自定义验证器,它告诉用户他选择的日期是否有效。如果该日期已被另一个实体阻止,则该日期无效。这对于添加新实体来说是完美的。

现在,我想仅在日期本身发生更改时才触发编辑时的日期验证。因此,仅更改约会的标题不应验证日期。

我的实体类:

use Doctrine\ORM\Mapping as ORM;
use Acme\Bundle\Validator\Constraints as AcmeAssert;

/**
 * Appointment
 *
 * @ORM\Entity
 * @AcmeAssert\DateIsValid
 */
class Appointment
{
  /**
   * @ORM\Column(name="title", type="string", length=255)
   *
   * @var string
   */
  protected $title;

  /**
   * @ORM\Column(name="date", type="date")
   *
   * @var \DateTime
   */
  protected $date;
}
Run Code Online (Sandbox Code Playgroud)

验证器类(用作服务):

use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
/**
 * Validates the date of an appointment.
 */
class DateIsValidValidator extends ConstraintValidator
{
    /**
     * {@inheritdoc}
     */
    public function validate($appointment, Constraint $constraint)
    {
        if (null === $date …
Run Code Online (Sandbox Code Playgroud)

forms validation constraints symfony

6
推荐指数
1
解决办法
4010
查看次数

使用SonataAdminBundle对实体进行自定义删除处理

我想实现一些自定义删除处理.我们有一些类型的实体只在数据库中被标记为已删除.从数据库中真正删除是由计划的进程完成的.

现在很容易替换Admin类中的delete方法,但是我在批处理操作方面遇到了一些问题.创建子包以修改常规或在我眼中的CRUDController类中创建新方法是没有多大意义的.

所以我倾向于创建一个自定义的ModelManager(基于DoctrineORMAdminBundle之一)并将业务逻辑放入其中.我找不到关于这部分的任何文档.

这会是一个干净的解决方案吗?这种逻辑在很多地方传播都是一种遗憾.:/

干杯马蒂亚斯

symfony symfony-sonata sonata-admin

2
推荐指数
1
解决办法
1574
查看次数