Symfony2.6 - 服务

时间:2015-05-19 20:32:22

标签: symfony

几个月以来,我学会了Symfony2。

我创建了一项服务。当我在一个简单的控制器中使用它时,我没有问题。当我在管理我的实体的控制器中使用它时,我遇到了问题。

我的服务是:

<?php
namespace Cours\BlogBundle\Services;
class Service1
{
    public function creerSlug($texte)
    {        
        $texte = transliterator_transliterate("Latin-ASCII; [:Punctuation:] Remove; Lower();", $texte);
        $texte = preg_replace('/[-\s]+/', '-', $texte);
        $texte = trim($texte, '-');
        return $texte;
    }
}

我的简单控制器是:

<?php
namespace Cours\BlogBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Cours\BlogBundle\Services\Service1;
class TestController extends Controller
{
    public function indexAction()
    {
        $texte = "Le test du slug";
        $service1 = $this->container->get('service1');
        $texte = $service1->creerSlug($texte);
        return $this->render('CoursBlogBundle:Test:index.html.twig', array('texte' => $texte));
    }
}

管理我的实体的控制器的操作是:

public function ajouterAction(Request $request)
{
    $rubrique = new Rubrique();
    $form = $this->createForm(new RubriqueType(), $rubrique);        
    if ($request->isMethod('POST'))
    {
        $form->handleRequest($request);
        if ($form->isValid())
        {
            $manager = $this->getDoctrine()->getManager();
            $rubrique = $form->getData();
            $texte = $rubrique->getTexte();
            $service1 = $this->container->get('service1');
            $slug = $serviceSlug->creerSlug($texte);
            $slug = $rubrique->setSlug($slug);
            $manager->persist($rubrique);
            $manager->flush();
            return $this->redirect($this->generateUrl('cours_blog_accueil'));
        }
    }
    return $this->render('CoursBlogBundle:Rubrique:ajouter.html.twig', array('form' => $form->createView()));
}

我的观点告诉我,我的slug不能为空。

我认为我的行动有误,但我找不到。

有人帮助我吗?

亲爱的,非常感谢你

2 个答案:

答案 0 :(得分:0)

变化

<?php
  // show captcha HTML using Securimage::getCaptchaHtml()
  require_once 'securimage.php'; // CHANGE THIS TO THE CORRECT PATH
  $options = array();
  echo Securimage::getCaptchaHtml($options);
?>

    $service1 = $this->container->get('service1');
    $slug = $serviceSlug->creerSlug($texte);

答案 1 :(得分:0)

我建议从$rubrique = $form->getData(); $texte = $rubrique->getTexte();发表评论/删除ajouterAction并手动设置文本(仅用于测试目的):

if ($form->isValid())
{
    $manager = $this->getDoctrine()->getManager();
    // $rubrique = $form->getData();
    // $texte = $rubrique->getTexte();

    $rubrique->setTexte('Some text');

    $service1 = $this->get('service1');

    $slug = $service1->creerSlug($rubrique->getTexte());
    ...

如果有效,您可以为表单类型中的texte字段设置一些验证,以防止输入无效值。

另外我建议使用一些库(Cocur/Slugify可能是一个不错的选择),而不是自己处理这个过程。