2016-04-19 2 views
-1

J'ai le schéma suivant:Comment ajouter une deuxième langue à un moment ultérieur pour l'internationalisation?

<!-- language: lang-xml --> 
<table name="blog" phpName="Blog"> 
    <column name="id" type="INTEGER" required="true" primaryKey="true" autoIncrement="true" /> 
    <column name="title" phpName="Title" type="VARCHAR" size="100" required="true" /> 
    <column name="short_link" phpName="ShortLink" type="VARCHAR" size="64" required="false" /> 
    <column name="description" phpName="Description" type="LONGVARCHAR" required="false" /> 
    <column name="content" phpName="Content" type="LONGVARCHAR" required="false" /> 
    <column name="visibility" phpName="Visibility" type="INTEGER" default="-1" required="true" /> 

    <behavior name="i18n"> 
     <parameter name="i18n_columns" value="title, short_link, description, content" /> 
    </behavior> 
    <behavior name="timestampable" /> 
    <behavior name="soft_delete" /> 
    <behavior name="versionable" /> 
</table> 

<table name="blog_i18n" phpName="blogi18n"> 
    <column name="id" type="INTEGER" required="true" primaryKey="true" /> 
    <column name="locale" type="VARCHAR" size="5" required="true" primaryKey="true" /> 
    <column name="title" phpName="Title" type="VARCHAR" size="100" required="false" /> 
    <column name="short_link" phpName="ShortLink" type="VARCHAR" size="64" required="false" /> 
    <column name="description" phpName="Description" type="LONGVARCHAR" required="false" /> 
    <column name="content" phpName="Content" type="LONGVARCHAR" required="false" /> 

    <foreign-key foreignTable="blog" onDelete="setnull" onUpdate="cascade"> 
     <reference local="id" foreign="id" /> 
    </foreign-key> 

    <behavior name="timestampable" /> 
    <behavior name="soft_delete" /> 
    <behavior name="versionable" /> 
</table> 

Quand j'ajouter un nouveau message, il ajoute une seule langue (principale langue d'application), l'idée est de laisser l'option pour les langues plus à un moment ultérieur.

c'est le code qui ajoute le message:

<!-- language: lang-php --> 
public function addBlogPost(Application $app) { 

    $data = array (
     'title' => $app['request']->get('Title'), 
     'language' => $app['request']->get('Language'), 
     'short-link' => $this->createShortLink($app, $app['request']->get('Title')), 
     'description' => $app['request']->get('Description'), 
     'content' => $app['request']->get('Content') 
     ); 

    $blog = new Blog(); 

    $blog->setLocale($data['language']); 
    $blog->setTitle($data['title']); 
    $blog->setShortLink($data['short-link']); 
    $blog->setDescription($data['description']); 
    $blog->setContent($data['content']); 

    try { 
     $blog->save(); 
     $app['session']->getFlashBag()->add(
      'success', 
      'success_add_blog_text' 
      ); 
      return $app->redirect($app['url_generator']->generate('adminBlog')); 
    } catch (PropelException $pe) { 
     $app['session']->getFlashBag()->add(
      'error', 
      'error_add_blog_text' 
      ); 
     return $app->redirect($app['url_generator']->generate('adminBlog')); 
    } 
} 

Jusqu'à ici toutes les œuvres magnifiquement comme prévu, mais lorsque je tente d'effectuer une modification, quel qu'en soit la langue, cela ne fonctionne pas.

<!-- language: lang-php --> 
public function editBlogPost(Application $app) { 
    $id = $app['request']->get('id'); 
    $lang = $app['request']->get('language'); 
    if(!is_numeric($id)) { 
     $app['session']->getFlashBag()->add(
       'error', 
       'blog_doesnt_exists_text' 
      ); 
     return $app->redirect($app['url_generator']->generate('adminBlog')); 
    } 

    $data = array (
     'id' => $app['request']->get('id'), 
     'language' => $app['request']->get('language'), 
     'title' => $app['request']->get('title'), 
     'short-link' => $app['request']->get('short-link'), 
     'description' => $app['request']->get('description'), 
     'content' => $app['request']->get('content') 
     ); 

    $post = BlogQuery::create(); 

    $post->setLocale($data['language']); 
    $post->setTitle($data['title']); 
    $post->setShortLink($data['short-link']); 
    $post->setDescription($data['description']); 
    $post->setContent($data['content']); 

    try { 
     $post->save(); 
     $app['session']->getFlashBag()->add(
      'success', 
      'success_edit_blog_text' 
      ); 
     return $app->redirect($app['url_generator']->generate('adminBlog')); 
    } catch (PropelException $pe) { 
     $app['session']->getFlashBag()->add(
      'error', 
      'error_edit_blog_text' 
      ); 
     return $app->redirect($app['url_generator']->generate('adminBlog')); 
    } 
} 

Erreur 500.

méthode non définie ModelCriteria :: setLocale()

est ce que je reçois. Dois-je modifier à l'aide de Blogl18nQuery à la place? Ou est-ce que je le fais de la mauvaise façon dès le départ?

+0

Comment instanciez-vous 'ModelCriteria'? 'setLocale()' n'est évidemment pas dans la portée. – Marcus

+0

hmm! il semble que ce n'est pas sur BlogQuery, là encore, il semble que "edit" n'est pas le lieu pour "ajouter" de nouvelles langues ... gona tenter une comparaison et peut-être une méthode privée pour ajouter de nouvelles langues! laissez-vous savoir ce que je trouve – JLChafardet

Répondre

0

Ok après quelques tests (en raison du manque de volonté d'effectuer des recherches complexes pour obtenir des réponses que je dois admettre)

ce que je l'ai fait et cela fonctionne (il peut ne pas être la meilleure tho solution, mais fonctionne pour l'instant). Je suis allé avec l'utilisation de Blogi18n et cela a fait l'affaire.