phpNutt
phpNutt

Reputation: 1539

How to read config value in Symfony2 in Model class

I've defined a hash salt in my config.yml and would like to get this in my User class, any ideas about how to do this? I've seen loads of examples about how to use this in the controller class, but not in the model?

Thanks

Upvotes: 3

Views: 2221

Answers (2)

Xavi Montero
Xavi Montero

Reputation: 10684

See my answer here:

How do I read configuration settings from Symfony2 config.yml?

with

  • FIRST APPROACH: Separated config block, getting it as a parameter
  • SECOND APPROACH: Separated config block, injecting the config into a service

Answering to you, if you want to inject that in the Model, the best approach is to have a Manager that acts as a factory of the model, then the manager can inject itself into the model, so the model can get access it and therefore, get access to the configuration.

Say, your model has a Car and a House if they are related you could have a CityManager with a getAllCars() or getCarById() or similar, as well as a getAllHouses() or a getHouseById() or so.

Then in the CityManager either pass the config to the Model class:

class CityManager()
{
    private $myConfigValue;

    public getCarById( $id )
    {
        return new Car( $id, $this->myConfigValue );
    }
}

either pass yourself, and let the Model get the config only if it needs it:

class CityManager()
{
    private $myConfigValue;

    public getCarById( $id )
    {
        return new Car( $id, $this );
    }

    public getConfig()
    {
        return $this->myConfigValue;
    }
}

Fill the value as in the article linked.

Upvotes: 0

Steven Mercatante
Steven Mercatante

Reputation: 25305

I've had the same question. It'd be nice if there was something similar to sfConfig::get() from symfony 1. Anyway, I think this may actually be a case of "there's a better way to do this". What if you just use setter injection when you instantiate your User class (ie use a setHashSalt() method)? If you're instantiating from a controller you can use $this->container->parameters['hash_salt'].

AFAIK, there's no way to access config.yml parameters without using the container object. I'm very curious to see if anyone has an easier way.

Upvotes: 5

Related Questions