Doctrine 2 - ORM
  1. Doctrine 2 - ORM
  2. DDC-3054

[GH-991] Ability to define custom functions with callback instead of class name

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 2.5
    • Component/s: None
    • Security Level: All
    • Labels:
      None

      Description

      This issue is created automatically through a Github pull request on behalf of mnapoli:

      Url: https://github.com/doctrine/doctrine2/pull/991

      Message:

      Right now the only way to define custom DQL functions is by giving the class name, and Doctrine will create the class:

      ```php
      $config->addCustomNumericFunction('FOO', 'My\Custom\DqlFunction');
      ```

      This is very limiting when the custom functions has dependencies, for example it can't be created by a DI container.

      The approach I have taken here is very simple: it allows to define a callback instead of the class name: the callback will be called and it should return the instance:

      ```php
      $config->addCustomNumericFunction('FOO', function($funcName)

      { return new My\Custom\DqlFunction($funcName); }

      );
      ```

      On a side note, I think it would be great to generalize that approach because currently there are a lot of places where the same constraints apply.

        Activity

        Hide
        Doctrine Bot added a comment -

        A related Github Pull-Request [GH-991] was closed:
        https://github.com/doctrine/doctrine2/pull/991

        Show
        Doctrine Bot added a comment - A related Github Pull-Request [GH-991] was closed: https://github.com/doctrine/doctrine2/pull/991

          People

          • Assignee:
            Guilherme Blanco
            Reporter:
            Doctrine Bot
          • Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: