2012-11-26 91 views
1

我是新來的Symfony,所以也許我的問題是非常愚蠢的,但在這裏它是:定製主義DQL功能

我試圖定義一個定製的學說DQL功能,但我不能讓它工作。

PHP

namespace MsfBundle\AST\Functions; 


use Doctrine\ORM\Query\Lexer; 

class Geo extends \Doctrine\ORM\Query\AST\Functions\FunctionNode 
{ 
    /** 
    * @var \Doctrine\ORM\Query\AST\ComparisonExpression 
    */ 
    private $latitude; 
    /** 
    * @var \Doctrine\ORM\Query\AST\ComparisonExpression 
    */  
    private $longitude; 

    /** 
    * Parse DQL Function 
    * 
    * @param \Doctrine\ORM\Query\Parser $parser 
    */ 
    public function parse(\Doctrine\ORM\Query\Parser $parser) 
    { 
     $parser->match(Lexer::T_IDENTIFIER); 
     $parser->match(Lexer::T_OPEN_PARENTHESIS); 
     $this->latitude = $parser->ComparisonExpression(); 
     $parser->match(Lexer::T_COMMA); 
     $this->longitude = $parser->ComparisonExpression(); 
     $parser->match(Lexer::T_CLOSE_PARENTHESIS); 
    } 

    /** 
    * Get SQL 
    * 
    * @param \Doctrine\ORM\Query\SqlWalker $sqlWalker 
    * @return string 
    */ 
    public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker) 
    { 

    return sprintf('(6366*acos(cos(radians(%s))*cos(radians(`%s`))*cos(radians(`%s`) -radians(%s))+sin(radians(%s))*sin(radians(`%s`))))', 
    $this->latitude->leftExpression->dispatch($sqlWalker), 
    $this->latitude->rightExpression->dispatch($sqlWalker), 
    $this->longitude->rightExpression->dispatch($sqlWalker), 
    $this->longitude->leftExpression->dispatch($sqlWalker), 
    $this->latitude->leftExpression->dispatch($sqlWalker), 
    $this->latitude->rightExpression->dispatch($sqlWalker)); 
    } 
} 

config.yml

doctrine: 
#... 
orm: 
    auto_generate_proxy_classes: "%kernel.debug%" 
    entity_managers: 
     default: 
      auto_mapping: true 
      dql: 
       numeric_functions: 
        geo :MsfBundle\AST\Functions\Geo 

這裏就是我得到:

Fatal error: Class 'MsfBundle\AST\Functions\Geo' not found in /var/www/mcr/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php on line 3070

如果您有任何鉛幫我拿這個throught,我真的很感激它。

謝謝!

+0

你能告訴我什麼是你的類文件路徑?我看到你沒有使用你的供應商名稱。 – karolhor

回答

0

你缺少地緣反斜槓:MsfBundle \ AST \功能\地理,應該是地理:\ MsfBundle \ AST \ \功能地球。似乎這個班級需要一個絕對的參考。

+0

感謝您的回答,我試了一下這裏的結果之前:致命錯誤:類 '\ MsfBundle \ AST \功能\地理' 不是在/ var/WWW/MCR /供應商/教義/ ORM發現/ lib中/教義/ ORM/3070行上的Query/Parser.php – Iknowkungfu

+0

在這種情況下,請確保您的文件src/MsfBundle/AST/Functions/Geo.php中有類,也許它只是一個錯字。通常情況下,在Symfony2中,路徑爲src/Acme的/ VendorBundle,捆綁是在第二條路徑,不喜歡你,也許命名空間無國界醫生\ ASTBundle \功能\地理 –

+0

我叫我的文件GeoFunction.php,這是問題... 非常感謝 ! – Iknowkungfu