2010-01-06 11 views
5

Soy nuevo en Symfony y tengo algunas preguntas simples. Intento entender el sistema de módulos, pero no entiendo cómo creo la página de inicio real u otras páginas que no están basadas en un modelo de db. Por ejemplo, la página simple sobre que tiene información estática o la página principal que es una combinación de un montón de información de diferentes modelos.Hacer páginas estáticas en Symfony 1

¿Alguien puede ayudar?

Respuesta

4

Antes que nada, los módulos no tienen que estar restringidos a un modelo de la base de datos. Puede tener un módulo Foo que no dependa de contenido de base de datos, y un módulo Bar que se basa principalmente en 3 modelos diferentes. La separación del módulo es una forma de dividir lógicamente su sitio en secciones manejables. Por ejemplo, un sitio de comercio electrónico podría tener un módulo de productos, un módulo de categorías y un módulo de carro, y así sucesivamente.

Su última frase a continuación, se puede dividir en 2 partes:

1) La información estática puede ser en cualquier página - si es para cosas como "Acerca de nosotros" y "Preguntas frecuentes", etc, yo personalmente tiendo a usar una "default" o módulo "casa", y crear las diversas acciones en relación existe:

./symfony generate:module appname home

y

class homeActions extends sfActions 
{ 
    public function executeAbout(sfWebRequest $request) 
    { 
    // ... 
    } 

    public function executeFaq(sfWebRequest $request) 
    { 
    // ... 
    } 
} 

con el correspondiente t establecer archivos (aboutSuccess.php, faqSuccess.php).

2) Una página puede estar compuesta por datos de muchos modelos diferentes: simplemente use el método de recuperación de datos de su ORM preferido y configúrelo para la vista ($this->data = MyModel->findByColumn(...), etc.). Si se refiere a datos de diferentes módulos, entonces probablemente sería mejor mirar parciales o componentes para los elementos de una página que se pueden usar en diferentes módulos (navegación, etc.). Consulte the Symfony docs para obtener más detalles sobre estos.

+0

Gracias! Funciona, pero ¿cómo puedo editar los archivos de enrutamiento.yml para que pueda acceder a la página como host.com/about – Danny

+0

Genial, me alegro de que funcionó para usted. En su routing.yml, puede agregar una ruta que coincida con la parte de "acción" y siempre use el módulo estático. He puesto un ejemplo en http://pastebin.com/f6b55d7a7 – richsage

3

Puede crear un módulo, p. llamado static y crea acciones para cada página estática o solo una acción que entrega la página dependiendo de una variable de solicitud. Lo único que hace esta acción es cargar una plantilla.

En mi humilde opinión, sería bueno si Symfony viene con un módulo predeterminado para esto.

Por ejemplo, las acciones de módulo (mi costumbre) static:

class staticActions extends sfActions 
{ 
    public function executeIndex(sfWebRequest $request) 
    { 
    if(!$request->hasParameter('site')) { 
     return sfView::ERROR;  
    } 
    $this->site = $request->getParameter('site'); 
    } 
} 

Con esta plantilla:

//indexSuccess.php 
<?php include_partial($site) ?> 

Los sitios de estática reales son todos parciales.

En mi routing.yml se parece a esto:

# static stuff 
about: 
    url: /about 
    param: {module: static, action: index, site: about} 

De esta manera sólo tiene que crear un nuevo parcial y una nueva entrada de enrutamiento al agregar un sitio estático y no tener que tocar el código PHP .

+0

puedes usar $ request-> getParameter() directamente – gpilotino

+0

Cierto, lo edité ... Gracias. –

4

Estoy acostumbrado a manejar páginas estáticas de esta manera.

Primero creo una nueva entrada en aplicaciones/frontend/config/routing.yml:

page: 
    url: pages/:page 
    param: { module: page, action: index } 

Entonces escribo una "página" módulo (apps/frontend/modules/página/acciones/actions.class.php):

<?php 
class pageActions extends sfActions 
{ 
    public function executeIndex() 
    { 
    $this->page = $this->getRequestParameter("page"); 
    $this->forward404Unless($this->_partialExists($this->page)); 
    } 

    protected function _partialExists($name) 
    { 
    $directory = $this->getContext()->getModuleDirectory(); 
    return (is_readable($directory.DIRECTORY_SEPARATOR."templates". 
      DIRECTORY_SEPARATOR."_".$name.".php")); 
    } 
} 

último paso, poner en modules/página /templates/indexSuccess.php este código:

<?php include_partial($page); ?> 

Así que todo lo que tiene que hacer a partir de ahora es crear un parcial para cada página es decir estática. apps/frontend/modules/página/templates/_home.php que se puede llegar a http://yousite/pages/home (sin la necesidad de añadir una nueva entrada de enrutamiento para cada página)

0

Aparte de lo anterior, cuente con un CMS para estática páginas, por lo que no necesitará personal técnico para mantenerlos o cambiarlos. Esto depende del proyecto, por supuesto.

2

Otra manera de servir páginas estáticas sin tener que escribir ningún código del controlador es la creación de la ruta algo como lo siguiente:

myStaticPage: 
    pattern: /pageName 
    defaults: 
     _controller: FrameworkBundle:Template:template 
     template: MyBundle:Home:pageName.html.twig 

A continuación, basta con crear la plantilla de ramas y que debería funcionar bien.

+0

Tenga cuidado, esta pregunta es sobre Symfony 1, no sobre Symfony 2. – j0k

0

Para realmente páginas estáticas e independientes, puede simplemente crear cualquier archivo en el directorio [pathToYourProjectRoot]/web.

Puede por, por ejemplo, [pathToYourProjectRoot]/web/assets/static_html/about.html. Luego, enlace a la página directamente por http://your.site.com/assets/static_html/about.html.

Cuestiones relacionadas