【发布时间】:2017-11-29 09:28:14
【问题描述】:
我制作了一个 PHP Symfony 项目用于学习目的。现在我被卡住了,所以我有一个控制器,它呈现一个视图。但是在那个控制器里面我想访问另一个控制器并创建一个对象,因为我需要它的方法。
简而言之:我如何在 Symfony 的另一个类中创建一个类/对象?
这是我的代码:
<?php
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use AppBundle\Entity\User;
use AppBundle\Controller\LoginController;
class HomeController extends Controller
{
/**
* @Route("/", name="home")
*/
public function renderIndexAction(Request $request)
{
$user = new User();
$form = $this->createFormBuilder($user)
->add('username', TextType::class, array('label' => 'username:'))
->add('password', PasswordType::class, array('label' => 'password:'))
->add('save', SubmitType::class, array('label' => 'login'))
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$user = $form->getData();
$user_username = $user->getUsername();
$user_password = $user->getPassword();
$loginController = new LoginController();
$user = $loginController->checkAction();
$session = $request->getSession();
$data = "test";
$session->set('form_data', $data);
return $this->redirectToRoute('addressbook');
}
return $this->render('home/index.html.twig', array('form' => $form->createView()));
}
}
所以我想在我的 HomeController 中使用 LoginController。但它给了我一个错误:
在 null 上调用成员函数 has() 500 内部服务器错误 - FatalThrowableError
PS:是的,我知道我的应用程序不安全,但我仍在学习基本的 OOP。所以像这样调用 LoginController 可能是一种奇怪的方式。但这是为了学习目的。
【问题讨论】:
-
你从那里需要什么方法?在这里添加它的代码。您可能希望将其提取到单独的服务中并注入到两个控制器中,而不是尝试在另一个控制器中创建控制器。
-
如果你想访问另一个控制器的另一个端点,查找子请求。如果你想重用另一个控制器的方法,把那个方法变成一个服务,并在两个控制器中注入使用那个服务。
-
你不想在你的控制器中使用另一个控制器的实例,这是错误的逻辑;你应该阅读 MVC 原理。在您的情况下,您可能想要创建另一个类 - 一个服务类,并且两个控制器都将使用该服务。您还应该阅读依赖注入,以加载服务类。
-
为什么在另一个Controller里面做一个Controller是错的?我想要的只是从另一个类中的一个类创建一个对象?
-
我正在尝试从该控制器提供服务。写在 services.yml 中是否足够: services: app.login_controller: class: AppBundle\Controller\LoginController 我可以这样调用 LoginController: $loginController = app.login_controller; ?
标签: php symfony oop model-view-controller symfony-2.8