我创建了一个实体Testme并使用它生成了 crud 文件bin/console make:crud并尝试向表单添加验证规则,但它不起作用:
我的实体:
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity(repositoryClass="App\Repository\TestmeRepository")
*/
class Testme
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @Assert\NotBlank()
* @ORM\Column(type="string", length=255)
*/
private $name;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $description;
....
Run Code Online (Sandbox Code Playgroud)
表格:
<?php
namespace App\Form;
use App\Entity\Testme;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class TestmeType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder …Run Code Online (Sandbox Code Playgroud) 我有一个命令叫做:
broker:create-device
Run Code Online (Sandbox Code Playgroud)
它接受 2 个命令行参数。当我通过命令行运行时它起作用了。
现在,我想从控制器运行。所以我在另一篇 Stack Overflow 帖子中读到我可以这样做:
$process = new Process(['php bin/console broker:create-device',1,2]);
$process->run();
Run Code Online (Sandbox Code Playgroud)
并且确实执行了该命令,日志仅显示弃用错误:
[2019-02-07 17:04:13] php.INFO: User Deprecated: The "Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand" class is deprecated since Symfony 4.2, use "Symfony\Component\Console\Command\Command" with dependency injection instead. {"exception":"[object] (ErrorException(code: 0): User Deprecated: The \"Symfony\\Bundle\\FrameworkBundle\\Command\\ContainerAwareCommand\" class is deprecated since Symfony 4.2, use \"Symfony\\Component\\Console\\Command\\Command\" with dependency injection instead. at /Users/myuser/Code/site/vendor/symfony/framework-bundle/Command/ContainerAwareCommand.php:18)"} []
Run Code Online (Sandbox Code Playgroud)
但是,执行中的实际代码并未运行。有什么想法吗?
对于我使用的 symfony 形式和树枝
{{ form_errors(form) }}
Run Code Online (Sandbox Code Playgroud)
使用bootstrap_4_horizontal_layout.html.twig,它工作正常,输出如下:
<span class="alert alert-danger d-block"><span class="d-block">
<span class="form-error-icon badge badge-danger text-uppercase">Error</span> <span class="form-error-message">Error</span>
</span></span>
Run Code Online (Sandbox Code Playgroud)
但我需要对其进行自定义以翻译消息旁边的引导错误标签。我可以在哪里定制它?
我试图在我创建的服务的构造函数中注入像entityManager这样的公共服务,但我一直有这个错误:
函数App\Services\BillingInterface :: __ construct()的参数太少,在第144行的/var/www/.../src/Controller/TestController.php中传递了0,正好是预期的1.
在我的控制器中,服务是以不同的方法正确注入的,但在我创建的服务中,它不是在构造函数中注入的.
我没有更改services.yaml中的任何内容,因为文档说autowire在Symfony 4.2中是自动的
PS:我最近从Symfony 4.1更新到4.2,我不确定,但我认为它之前有效.
也许图书馆没有正确更新,但我没有发现任何错误.
服务代码:
#/src/Services/BillingInterface
namespace App\Services;
use Doctrine\ORM\EntityManagerInterface;
class BillingInterface {
private $em;
public function __construct(EntityManagerInterface $entityManager)
{
$this->em = $entityManager;
}
}
Run Code Online (Sandbox Code Playgroud)
控制器代码:
namespace App\Controller;
use App\Services\BillingInterface;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class TestController extends AbstractController {
public function teest(EntityManagerInterface $entityManager)
{
$billing = new BillingInterface();
}
}
Run Code Online (Sandbox Code Playgroud)
如果我使用$entityManagerController的参数实例化BillingInterface ,它可以工作,但我希望它直接在BillingInterface类构造函数中注入.
最后,这是Symfony文档中的内容:
// src/Service/MessageGenerator.php
// ...
use Psr\Log\LoggerInterface;
class MessageGenerator
{
private $logger;
public function __construct(LoggerInterface $logger) …Run Code Online (Sandbox Code Playgroud) 我将我的网站从Symfony 3.4更新到Symfony 4,并做了一些更改。但是知道我有这个错误:
您请求的服务“ D”不存在。
这是我的堆栈跟踪:
Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException:
You have requested a non-existent service "D".
at vendor\symfony\dependency-injection\Container.php:263
at Symfony\Component\DependencyInjection\Container->get('D')
(vendor\symfony\routing\Loader\DependencyInjection\ServiceRouterLoader.php:38)
at Symfony\Component\Routing\Loader\DependencyInjection\ServiceRouterLoader->getServiceObject('D')
(vendor\symfony\routing\Loader\ObjectRouteLoader.php:55)
at Symfony\Component\Routing\Loader\ObjectRouteLoader->load('D:\\IIS Websites\\Wizard\\src/config/routing.yml', 'service')
(vendor\symfony\config\Loader\DelegatingLoader.php:40)
at Symfony\Component\Config\Loader\DelegatingLoader->load('D:\\IIS Websites\\Wizard\\src/config/routing.yml', 'service')
(vendor\symfony\framework-bundle\Routing\DelegatingLoader.php:70)
at Symfony\Bundle\FrameworkBundle\Routing\DelegatingLoader->load('D:\\IIS Websites\\Wizard\\src/config/routing.yml', 'service')
(vendor\symfony\framework-bundle\Routing\Router.php:56)
at Symfony\Bundle\FrameworkBundle\Routing\Router->getRouteCollection()
(vendor\symfony\routing\Router.php:367)
at Symfony\Component\Routing\Router->getMatcherDumperInstance()
(vendor\symfony\routing\Router.php:289)
at Symfony\Component\Routing\Router->Symfony\Component\Routing\{closure}(object(ResourceCheckerConfigCache))
at call_user_func(object(Closure), object(ResourceCheckerConfigCache))
(vendor\symfony\config\ResourceCheckerConfigCacheFactory.php:43)
at Symfony\Component\Config\ResourceCheckerConfigCacheFactory->cache('D:\\IIS Websites\\Wizard\\var\\cache\\dev/srcDevDebugProjectContainerUrlMatcher.php', object(Closure))
(vendor\symfony\routing\Router.php:302)
at Symfony\Component\Routing\Router->getMatcher()
(vendor\symfony\routing\Router.php:256)
at Symfony\Component\Routing\Router->matchRequest(object(Request))
(vendor\symfony\http-kernel\EventListener\RouterListener.php:109)
at Symfony\Component\HttpKernel\EventListener\RouterListener->onKernelRequest(object(GetResponseEvent), 'kernel.request', object(EventDispatcher))
(vendor\symfony\event-dispatcher\EventDispatcher.php:212)
at Symfony\Component\EventDispatcher\EventDispatcher->doDispatch(array(array(object(DebugHandlersListener), 'configure'), array(object(ValidateRequestListener), 'onKernelRequest'), array(object(SessionListener), 'onKernelRequest'), array(object(FragmentListener), 'onKernelRequest'), array(object(RouterListener), 'onKernelRequest'), array(object(ResolveControllerNameSubscriber), 'onKernelRequest'), array(object(LocaleListener), 'onKernelRequest'), …Run Code Online (Sandbox Code Playgroud)