Mostrando entradas con la etiqueta symfony. Mostrar todas las entradas
Mostrando entradas con la etiqueta symfony. Mostrar todas las entradas

martes, noviembre 23, 2010

Cómo configurar varios proyectos Symfony en un mismo servidor

Éste truco no es mío, está sacado de http://trac.symfony-project.org/wiki/HowtoMultipleSFProjectsLocal, es la solución más elegante que he encontrado y que me ha funcionado. Sirve tanto para sistemas Windows como Linux, yo uso XAMPP para Windows (en el trabajo) y Symfony 1.4 así que las rutas y archivos están referidas a él.
El truco está en usar las direcciones 127.0.0.X para tus proyectos, con lo que en principio está limitado a 254 pero no creo que os juntéis con tantos proyectos... si fuera así se puede usar también las direcciones 127.0.X.X, bueno vamos al lío.

Tenemos que configurar un servidor virtual por cada proyecto que tengamos en httpd.conf (c:\xampp\apache\conf\httpd.conf), en el caso de XAMPP lo suyo es hacerlo en c:\xampp\apache\conf\extra\httpd-vhosts.conf, por ejemplo:

<VirtualHost 127.0.0.2:80>
  ServerName proyecto1
  DocumentRoot "c:\xampp\htdocs\proyecto1\web"
  DirectoryIndex index.php
  <Directory "c:\xampp\htdocs\proyecto1\web">
    AllowOverride All
    Allow from All
  </Directory>

  Alias /sf c:\xampp\htdocs\proyecto1\lib\vendor\symfony\data\web\sf
  <Directory "c:\xampp\htdocs\proyecto1\lib\vendor\symfony\data\web\sf">
    AllowOverride All
    Allow from All
  </Directory>
</VirtualHost>

<VirtualHost 127.0.0.3:80>
  ServerName proyecto2
  DocumentRoot "c:\xampp\htdocs\proyecto2\web"
  DirectoryIndex index.php
  <Directory "c:\xampp\htdocs\proyecto2\web">
    AllowOverride All
    Allow from All
  </Directory>

  Alias /sf c:\xampp\htdocs\proyecto2\lib\vendor\symfony\data\web\sf
  <Directory "c:\xampp\htdocs\proyecto2\lib\vendor\symfony\data\web\sf">
    AllowOverride All
    Allow from All
  </Directory>
</VirtualHost>

Después de esto hay que ir al archivos de hosts (c:\windows\system32\drivers\etc\hosts en Windows y /etc/hosts en Linux) y editarlo para que aparezca lo siguiente:
127.0.0.1 localhost
127.0.0.2 proyecto1
127.0.0.3 proyecto2

Una vez hecho esto para acceder a los proyectos que no están hechos con symfony pues solo hay que ir a http://localhost/paginadepruebas y para los de symfony ir a http://proyecto1 o http://proyecto2.

En el manual que he enlazado al principio existe un método para hacer la configuración de los virtual hosts dinámica pero sigue haciendo falta hacer la de los hosts a mano.

lunes, noviembre 22, 2010

Como conectar desde PHP a SQL Server 2005 Express con PDO (Symfony 1.4) en Windows

Por fin lo he conseguido, tenía el problema de conectar Symfony 1.4 a una base de datos SQL Server, leyendo por ahí vi que conectar a SQL Server 2008 era imposible pero sí era factible a la versión 2005, aquí van un par de tutoriales que no he usado porque no me convencía hacer tantos cambios:

También he mirado la documentación de Propel 1.5 sobre MSSQL pero no me ha ayudado y la de Symfony para lo mismo que sí me ha servido un poco. Al final lo que he hecho ha sido seguir mi intuición respecto a las pistas que se pueden conseguir buscando en foros, blogs, etc. Ahí va un resumen:
  1. Instalar Propel 1.5 en Symfony 1.4 ya que incluye algunas mejoras que pueden ser interesantes y al parecer funciona mejor con SQL Server, para ello tan fácil como usar el plugin sfPropelPlugin15. En el manual pone que hagamos symfony plugin:publish-assets antes de cambiar el archivo ProjectConfiguration.class.php pero en mi caso daba un error y al hacerlo en el orden inverso ha funcionado perfectamente.
  2. Descargar las librerías de Microsoft para conectar PHP con SQL Server (SQL Server Driver for PHP 2.0), es importante que sea la versión 2 porque es la que incluye los drivers para PDO.
  3. Copiar los archivos del driver en la carpeta correspondiente de PHP, en mi caso como uso XAMPP para Windows es en c:\xampp\php\ext.
  4. Incluir la línea extension=php_pdo_sqlsrv_53_ts_vc6.dll en el archivo php.ini, si tu versión de php ha sido compilada con Visual C++ 9 necesitas incluir la línea extension=php_pdo_sqlsrv_53_ts_vc9.dll, si no sabes qué versión tienes miras el phpinfo y verás al principio una fila que es Compiler. 
  5. Editar los archivos de conexión a la base de datos:
    • databases.yml:
      dev:
        propel:
          param:
            classname:  DebugPDO
            debug:
              realmemoryusage: true
              details:
                time:       { enabled: true }
                slow:       { enabled: true, threshold: 0.1 }
                mem:        { enabled: true }
                mempeak:    { enabled: true }
                memdelta:   { enabled: true }

      test:
        propel:
          param:
            classname:  DebugPDO

      all:
        propel:
          class:       sfPropelDatabase
          param:
            phptype:   sqlsrv
            classname: MssqlPropelPDO
      #     no tengo claro si usar MssqlPropelPDO o MssqlDebugPDO
      #     classname: MssqlDebugPDO
            dsn:       sqlsrv:server=(local)\sqlexpress ; Database=trinity_sqlserver
            username:  sa
            password:  bezoya
            encoding:  null
            pooling:   true
    • propel.ini:
      propel.database             = sqlsrv
      propel.database.driver      = sqlsrv
      propel.database.url         = sqlsrv:server=(local)\sqlexpress ; Database=nombredebasededatos
      propel.database.user        = usuario
      propel.database.password    = clave
    • Para hacer una conexión normal, sin Symfony ni Propel de por medio:
      $user = 'usuario';
      $pass = 'clave';
      try {
          $dbh = new PDO('sqlsrv:server=(local)\sqlexpress ; Database=
      nombredebasededatos', $user, $pass);
          $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
          foreach($dbh->query('SELECT * from test') as $row) {
              print_r($row);
              echo "
      ";
          }
          $dbh = null;
      } catch (PDOException $e) {
         print "Error!: " . $e->getMessage() . "
      ";
         echo "
      ".$dbh->getAttribute(PDO_ATTR_DRIVER_NAME);
         die();
      }
Y eso es todo, de momento solo he probado a crear la base de datos con el comando symfony propel:insert-sql y funciona correctamente.