Nó không được thực hiện bởi Học thuyết chỉ vì nó quá nền tảng tùy.
Tất cả những gì bạn cần, là triển khai QuoteStrategy của riêng mình.
Ví dụ, đối project symfony:
Sao chép-dán nhà cung cấp AnsiQuoteStrategy
lớp, đổi tên nó và làm cho một số trích dẫn:
AppBundle/ORM/QuoteStrategy.php
namespace AppBundle\ORM;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use Doctrine\ORM\Mapping as M;
class QuoteStrategy implements M\QuoteStrategy
{
private function quote($token, AbstractPlatform $platform)
{
// implement your quote strategy
switch ($platform->getName()) {
case 'mysql':
default:
return '`' . $token . '`';
}
}
// add quoting to appropriate methods
public function getColumnName($fieldName, M\ClassMetadata $class, AbstractPlatform $platform)
{
return $this->quote($class->fieldMappings[$fieldName]['columnName'], $platform);
}
// ... Rest methods
}
Sau đó, đăng ký chiến lược báo giá của bạn dưới dạng dịch vụ:
src/AppBundle/Resources/config/services.yml
app.orm.quote_strategy:
class: AppBundle\ORM\QuoteStrategy
public: false
Sau đó, sử dụng nó để cấu hình EntityManager của bạn:
app/config/config.yml
orm:
entity_managers:
default:
quote_strategy: app.orm.quote_strategy
Đó là tất cả :)
Nguồn
2017-10-31 13:05:51
Tôi vừa phát hiện ra rằng giáo lý DBAL hiện được vận chuyển bằng công cụ cli \ Doctrine \ DBAL \ Tools \ Console \ Comma nd \ ReservedWordsCommand() thực sự hữu ích cho việc quét các thực thể của bạn cho bất kỳ thứ gì có thể gây ra vấn đề. Hãy thử chạy "doctrine dbal: reserved-words" để kiểm tra nó. –
+1 Có vẻ kỳ lạ khi tạo bảng hoạt động tốt. –
Học thuyết IMHO bị hỏng ở đây. Bất cứ nơi nào khác mà hệ thống không thoát khỏi mọi thứ cho bạn, nó sẽ được gọi là lỗ hổng SQL injection. – rjmunro