如何在服务方法中访问Symfony控制器的$ this-> session和$ this-> request'objects'?

时间:2019-09-15 02:08:40

标签: session service symfony-2.8

对于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结果存储到变量中。如果我打算在三个类中的多个地方调用该服务,那么存储获取结果不是问题吗?

0 个答案:

没有答案