Strange how obscure it is to find a clear example of how to just access or show the value of a cookie in Twig, so here it is!

{{      app.request.cookies.get('yourCookieHere')  }}

Twig is the templating engine that powers Symfony views.  Symfony is the PHP framework from Sensio Labs.

If you are a company that uses open-source software and developers and you are not using a PHP framework, you should consider migrating your legacy “cowboy” code to a collaborative, scalable framework like Symfony before it becomes a necessity for your company.  I have overseen many migrations of systems and data over the years and am available for consultation at my business consulting site at Belchamber.us.

– Aaron Belchamber


Here is a quick way to access all request variables and output them in a Symfony Twig view:

{% for request in app.request.query.all  %}
   {{ request|raw }}<br/>
{% endfor %}

 


Okay, so Sensio Lab’s Symfony is great, but those repositories are a bit limiting in their design scope.  I mean, how often do you need to access data through custom database queries and other cross referencing between database tables and not only use one table?  Of course, you’re going to have to combine database tables in even mildly complex website but Symfony’s repositories are designed to deal with one table and one “entity” referencing that table.

One way to make sure you are accessing other repositories from an entity’s repository is to overload the parent’s constructor by calling on the parent constructor first.  I actually stumbled onto this solution because I wanted to see what Symfony’s base Repository class’s constructor looked like.  Look familiar?  It passes in the entity manager ($em) and the repository’s class ($class).

protected $yourEntityRepo;

function __construct($em, $class){

   parent::__construct($em, $class);
   $this->yourEntityRepo=$this->getManager()->getRepository(YourBundle:YourEntity');

}

Connect as many repositories as you need to this way.   Keep in mind that without the parent __construct params, you can still access the entity manager and get the repositories with $this->getManager(), this is just a convenient way to do it automatically and make other repositories available within the repository if you make those repositories class variables which would then be available in any method in the repository.


A MySQL “tinyint” field, regardless of length, is mapped as a boolean in Symfony’s MySQL DBAL platform.  Good to know, so when you start typing in those Doctrine ORM mapping files in annotation or my preferred way, YML files, you won’t get a fatal error because you didn’t define the field properly.

Here’s a list of the other main MySQL field types and how they are defined in Doctrine ORM mapping files.  It can get a little confusing, like “timestamp” is also “datetime” even though “datetime” is “datetime”.  It is what it is.  Once you realize you’re just making translations for one system to talk to another, it gets easier!

This list is helpful because when you start converting your database table fields, you will need a reference, or better yet, look into “Skipper ORM” and it will take care of mappings and creating entities out of your database tables automatically for you!

protected function initializeDoctrineTypeMappings()
{
$this->doctrineTypeMapping = array(
'tinyint' => 'boolean',
'smallint' => 'smallint',
'mediumint' => 'integer',
'int' => 'integer',
'integer' => 'integer',
'bigint' => 'bigint',
'tinytext' => 'text',
'mediumtext' => 'text',
'longtext' => 'text',
'text' => 'text',
'varchar' => 'string',
'string' => 'string',
'char' => 'string',
'date' => 'date',
'datetime' => 'datetime',
'timestamp' => 'datetime',
'time' => 'time',
'float' => 'float',
'double' => 'float',
'real' => 'float',
'decimal' => 'decimal',
'numeric' => 'decimal',
'year' => 'date',
'longblob' => 'blob',
'blob' => 'blob',
'mediumblob' => 'blob',
'tinyblob' => 'blob',
'binary' => 'blob',
'varbinary' => 'blob',
'set' => 'simple_array',
);
}