會話我有這樣的控制器:的Symfony 2.4在控制器
<?php
namespace app\EmpleadosBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\Session;
use app\EmpleadosBundle\Entity\Empleados;
use app\RolesEmpleadosBundle\Entity\RolesEmpleados;
use app\EmpleadosBundle\Service\Util;
session_start();
class DefaultController extends Controller
{
public function loginAction(){
//Siempre que abrimos la pagina limpiamos la session
$this->get('session')->clear();
return $this->render('EmpleadosBundle:Default:login.html.twig');
}
public function conexionAction(Request $request){
$em = $this->getDoctrine()->getManager();
$metodo=$request->getMethod();
if($metodo=='POST'){
//Obtenemos el n_empleado y la contraseña del formulario
$nempleado = $request->request->get('nempleado');
$password = $request->request->get('password');
//Buscamos en la base de datos para comprobar si hay coincidencia
$o_empleado = $em->getRepository('EmpleadosBundle:Empleados')->findBy(array(
'nEmpleado' => $nempleado,
'password' => $password
));
//Si la consulta devuelve algun registro es que hay coindicendia
//Almacenamos en session el empleado conectado y redirigimos a la funcion menu principal
if(count($o_empleado)==1){
$this->get('session')->set('empleado', $o_empleado);
//...
}
}
?>
在conexionAction這一點,我保存類EmpleadosBundle的目的:Empleados,如果我在這一點上打印會話是:
print_r($ this-> get('session') - > get('empleado'));
Array
(
[0] => app\EmpleadosBundle\Entity\empleados Object
(
[id:app\EmpleadosBundle\Entity\empleados:private] => 47
[nEmpleado:app\EmpleadosBundle\Entity\empleados:private] => 0000000002
[nombre:app\EmpleadosBundle\Entity\empleados:private] => USUARIO DIRECCION FRONT
[apellidos:app\EmpleadosBundle\Entity\empleados:private] => AAA
[password:app\EmpleadosBundle\Entity\empleados:private] => 12qwaszx
[email:app\EmpleadosBundle\Entity\empleados:private] =>
[fechaAlta:app\EmpleadosBundle\Entity\empleados:private] => DateTime Object
(
[date] => 2017-08-29 16:39:50.000000
[timezone_type] => 3
[timezone] => UTC
)
)
)
而在conexionAction函數結束時,我重定向到其他動作,在同一個控制器:
返回$這 - >重定向($這 - > generateUrl( 'menu_principal'));
而在此功能的會話對象的變化:
功能:
public function menuprincipalAction(){
$em = $this->getDoctrine()->getManager();
$empleado_conectado=$this->get('session')->get('empleado');
if($empleado_conectado[0]!=''){
$array_roles=array();
$o_roles_empleado = $em->getRepository('RolesEmpleadosBundle:RolesEmpleados')->findBy(array('empleado'=>$empleado_conectado[0]->getId()));
//...
在這裏,如果我打印會話:
的print_r($這個 - >獲得( '會話' ) - >獲取( 'empleado'));
Array
(
[0] => __PHP_Incomplete_Class Object
(
[__PHP_Incomplete_Class_Name] => app\EmpleadosBundle\Entity\empleados
[id:app\EmpleadosBundle\Entity\empleados:private] => 47
[nEmpleado:app\EmpleadosBundle\Entity\empleados:private] => 0000000002
[nombre:app\EmpleadosBundle\Entity\empleados:private] => USUARIO DIRECCION FRONT
[apellidos:app\EmpleadosBundle\Entity\empleados:private] => AAA
[password:app\EmpleadosBundle\Entity\empleados:private] => 12qwaszx
[email:app\EmpleadosBundle\Entity\empleados:private] =>
[fechaAlta:app\EmpleadosBundle\Entity\empleados:private] => DateTime Object
(
[date] => 2017-08-29 16:39:50.000000
[timezone_type] => 3
[timezone] => UTC
)
)
)
它改變到一個不完整的類和給予致命錯誤並且不容使用該對象。
- 編輯1 -
我tryed解決方案史蒂夫和它isn't工作,返回了同樣的錯誤:
我刪除了線的session_start(),和removin這條線就像會議沒有開始。
我會盡量解釋一步的處理步驟是否I'm缺少的東西:
我呼籲在loginAction在Empleados控制器,並與清除會話:
$此 - >獲得( '會議') - >清除();
然後我渲染登錄表單
2-視圖當我提交登錄表單我打電話conexionAction在Empleados控制器,在這裏,我查了一些參數,如果一切OK我保存的對象(會話) - > set('empleado',serialize($ o_empleado));或$ this-> get('session') - > set('empleado',$ o_empleado);
*注意:如果我在這裏打印$ this-> get('session'),我會完美地看到對象。
和保存對象後,我重定向到在同一個控制器的另一個行動:
回報$這個 - >重定向($這個 - > generateUrl( 'menu_principal'));
以前的重定向我在Empleados控制器中調用menuprincipalAction。在這裏,如果我嘗試打印的對象,我得到一個這樣的數組:
Array
(
[0] => __PHP_Incomplete_Class Object
(
[__PHP_Incomplete_Class_Name] => app\EmpleadosBundle\Entity\empleados
[id:app\EmpleadosBundle\Entity\empleados:private] => 47
[nEmpleado:app\EmpleadosBundle\Entity\empleados:private] => 0000000002
[nombre:app\EmpleadosBundle\Entity\empleados:private] => USUARIO DIRECCION FRONT
[apellidos:app\EmpleadosBundle\Entity\empleados:private] => AAA
[password:app\EmpleadosBundle\Entity\empleados:private] => 12qwaszx
[email:app\EmpleadosBundle\Entity\empleados:private] =>
[fechaAlta:app\EmpleadosBundle\Entity\empleados:private] => DateTime Object
(
[date] => 2017-08-29 16:39:50.000000
[timezone_type] => 3
[timezone] => UTC
)
)
)
我不understant爲什麼在第一次行動的對象的印刷是正確的,但在第二個它說,不完整的類名
https://stackoverflow.com/questions/2010427/php-php-incomplete-class-object-with-my-session-data Symfony將在你的控制器實例化之前開始一個會話 – Steve