对于Symfony v2.8服务容器,我是一个新手,刚刚在Symfony v2.8手册中获得了有关该主题的最简单的示例。但是,当我尝试使用自己的类和方法创建服务容器时,出现以下错误:
Error: Cannot access private property
AppBundle\Controller\BreakinOutBoardController::$request
这是我的服务容器及其服务配置信息:
services.yml -
# Learn more about services, parameters and containers at
# http://symfony.com/doc/current/book/service_container.html
parameters:
# parameter_name: value
services:
# service_name:
# class: AppBundle\Directory\ClassName
# arguments: ["@another_service_name", "plain_value", "%parameter_name%"]
app.checkLoggedIn:
class: AppBundle\Service\checkLoggedIn
arguments: []
src \ AppBundle \ Service \ checkLoggedIn.php -
<?php
// src/AppBundle/Service/checkLoggedIn.php
//
// See https://symfony.com/doc/2.8/service_container.html for details on how to create a
// service container.
//
namespace AppBundle\Service;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Request;
class checkLoggedIn {
public function checkLoggedIn( &$userDataOut, &$userDataIn, &$This,
$checkLoggedInAsAdmin = FALSE ) {
if( !isset( $This->session ) || empty( $This->session ) ) {
//下一行出现错误!
$session = $This->request->getSession();
} // End of if( !isset( $This->session ) || empty( $This->session ) ) ...
// See if the user is logged-in ...
if( isset( $userDataIn ) && !empty( $userDataIn ) &&
is_array( $userDataIn ) ) {
if( array_key_exists( 'loginDateTime', $userDataIn ) ) {
$loginDateTime = $userDataIn[ 'loginDateTime' ];
} // End of if( array_key_exists( 'loginDateTime', $userDataIn ) ) ...
if( !empty( $loginDateTime ) &&
$session->getFlashBag()
->has( 'userData-' . $loginDateTime ) ) {
$checkLoggedInData = $session->getFlashBag()
->peek( 'userData-' . $loginDateTime, [] );
} // End of if( !empty( $loginDateTime ) &&
// $This->session->getFlashBag()
->has( 'userData-' . $loginDateTime ) )
} // End of if( isset( $userDataIn ) && !empty( $userDataIn ) &&
is_array( $userDataIn ) ) ...
⫶
return $message; // Empty indicates that the user is logged-in.
} // End of checkLoggedIn( &$userDataOut, &$userDataIn, &$This,
$checkLoggedInAsAdmin = FALSE ) function.
} // End of checkLoggedIn class.
在我的Web应用程序页面控制器文件中,我使用以下代码调用checkLoggedIn方法:
$message = $this->container->get( 'app.checkloggedin' )
->checkLoggedIn( $userData, $userData, $this );
$this->loggedin = empty( $message );
使用x-debugger,我可以将执行跟踪到checkLoggedIn方法中,验证$ userData和$ this的值是否正确,然后将执行向下移动到下面的注释所在的行,其中 >错误发生在下一行!
1)如何在服务容器中调用父类的flashbag方法?
2)我更改了container-> get和checkLoggedIn方法调用,而没有将get结果存储到变量中。如果我打算在三个类中的多个地方调用该服务,那么存储获取结果不是问题吗?