繁体   English   中英

Symfony2.6-服务

[英]Symfony2.6 - Service

我已经学习几个月了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()));
}

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

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

有人帮我吗?

亲吻并非常感谢您

更改

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

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

我建议注释/删除$rubrique = $form->getData(); $texte = $rubrique->getTexte(); $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 ,您可以在表单类型的texte字段中设置一些验证,以防止输入无效值。

我也建议使用一些库( Cocur / Slugify是一个不错的选择),而不要自己处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM