我在Symfony的表单验证处理方面遇到了一些问题.我想基于其数据验证绑定到实体的表单.有很多信息如何使用FormEvents 动态修改表单字段.我在这个主题上缺少的是如何控制/修改验证.
我简化的用例是:
验证实现为Validator与Constraint::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) 由于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) 我有以下场景:我正在验证约会,并且有一个自定义验证器,它告诉用户他选择的日期是否有效。如果该日期已被另一个实体阻止,则该日期无效。这对于添加新实体来说是完美的。
现在,我想仅在日期本身发生更改时才触发编辑时的日期验证。因此,仅更改约会的标题不应验证日期。
我的实体类:
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) 我想实现一些自定义删除处理.我们有一些类型的实体只在数据库中被标记为已删除.从数据库中真正删除是由计划的进程完成的.
现在很容易替换Admin类中的delete方法,但是我在批处理操作方面遇到了一些问题.创建子包以修改常规或在我眼中的CRUDController类中创建新方法是没有多大意义的.
所以我倾向于创建一个自定义的ModelManager(基于DoctrineORMAdminBundle之一)并将业务逻辑放入其中.我找不到关于这部分的任何文档.
这会是一个干净的解决方案吗?这种逻辑在很多地方传播都是一种遗憾.:/
干杯马蒂亚斯