Php 如何从bin/console命令调用特定方法
我需要每2小时运行一次控制器方法。我在某处读到,您需要创建一个命令,并使用CRON运行该命令。这是正确的吗Php 如何从bin/console命令调用特定方法,php,symfony,Php,Symfony,我需要每2小时运行一次控制器方法。我在某处读到,您需要创建一个命令,并使用CRON运行该命令。这是正确的吗 MY COMMAND: namespace AppBundle\Command; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; u
MY COMMAND:
namespace AppBundle\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Routing\Annotation\Route;
class RunCommand extends Command
{
// the name of the command (the part after "bin/console")
protected static $defaultName = 'app:run';
protected function configure()
{
// ...
}
protected function execute(InputInterface $input, OutputInterface $output)
{
echo 'BEGIN';
$controller = new \AppBundle\Controller\DefaultController();
$controller->storeAction();
echo 'END';
}
}
MY CONTROLLER:
/**
* @Route("/to-db", name="to-db")
*/
public function storeAction()
{
$entityManager = $this->getDoctrine()->getManager();
$data = new Skuska();
$data->setName('Keyboard');
$entityManager->persist($data);
$entityManager->flush();
// die();
}
我的错误:在ControllerTrait.php第424行:调用成员函数的has()为null
我的代码正确吗?如何使用cron运行方法
我不想用另一个包裹。我想自己对其进行编程如注释中所述,您应该将逻辑移出控制器并移入服务,并在命令和控制器中使用该服务 使用默认的服务自动加载配置,您甚至不必关心您的服务声明。您的命令将自动成为服务,您可以向其中注入其他服务。
对于控制器,您甚至不需要使用特定的构造函数。
这可能不是实例化控制器的方式。老实说,控制器可能太高了,无法在控制台命令中使用。我该如何编程?如何调用方法?控制器用于请求。如果控制器中的功能在其他情况下也可用,那么将其放在服务中是明智的。此外,您还应该了解如何在命令中执行依赖项注入(在symfony 4.0中,您只需将服务添加到命令的构造函数中,并将其存储在属性中以供以后使用)。此外,控制器操作(带有路由)应始终返回响应。您应将控制器逻辑移动到服务中,并在命令中调用它,如前一条注释所述。我有一条错误消息:在DefinitionErrorExceptionPass.php第37行:无法自动连线服务“AppBundle\service\StoreService”:方法的参数“$entityManager”“\uuu construct()”的类型为“AppBundle\Service\EntityManager”“但是找不到此类。如果您复制了我的示例而没有更改任何内容,则您的类顶部将缺少用法。您需要添加使用条令\ORM\EntityManager代码>。我在示例中添加了用法和文件路径。请确保检查它们是否与您的目录结构和框架版本匹配。我收到一条错误消息:“app”命名空间中未定义任何命令。你是说这个吗?原则:映射我的symfony是3.4我刚刚意识到代码片段中的名称空间是AppBundle\Command
。您需要使用它,而不是app\Command
。我将改变我的例子来反映这一点。您使用的是什么版本的Symfony?