注意:未定义的偏移:9



我正在与Symfony和PHP合作,而我是新手。我想回应所有用户的汽车。

class UserController extends Controller
{   
    public function indexAction($uname)
    {
        $cars = new cars();
        $user = new user();
        $models = new models();
        $brands = new brands();
        $a = 1;
        $em = $this -> getDoctrine() -> getEntityManager();
        $id = $em -> getRepository("OBCarsTest1Bundle:user") ->findOneByuname($uname);
        array ($UserCars = $em -> getRepository("OBCarsTest1Bundle:cars") ->findByidUser($id));
        //$ModelId = $em -> getRepository("OBCarsTest1Bundle:models")->findById($UserCars);
        //$BrandsId = $em -> getRepository("OBCarsTest1Bundle:brands")->findOneById($ModelId);
        while($UserCars[$a]->getId() != Null)
        {
            if(! isset($UserCars[$a]))
            {
                $UserCars[$a] = Null;
            }
            //i want to see all the cars of the users
            echo ('Created user :  '.$UserCars[$a]->getName());
            //return new Response('Created user :  '.$UserCars[$a]->getId());
            $a++;
        }
        return new Response('ma akal');
        //return $this->render('OBCarsTest1Bundle:Default:index.html.twig', array('UserCars' => $UserCars));
    }

现在我的代码看起来像这样(在进行任何更改之前),但我有一个错误:

注意:未定义的属性:obcarstest1bundle entity cars :: $ getName

我搜索了这个问题,并试图解决该问题并在代码中进行更改,但是我得到了相同的结果。

class UserController extends Controller
{   
    public function indexAction($uname)
    {
        $cars = new cars();
        $user = new user();
        $models = new models();
        $brands = new brands();
        $a = 0;
        $em = $this -> getDoctrine();
        $id = $em -> getRepository("OBCarsTest1Bundle:user") ->findOneByuname($uname);
        $UserCars = $em -> getRepository("OBCarsTest1Bundle:cars") ->findByidUser($id);
        //$ModelId = $em -> getRepository("OBCarsTest1Bundle:models")->findById($UserCars);
        //$BrandsId = $em -> getRepository("OBCarsTest1Bundle:brands")->findOneById($ModelId);
        foreach($UserCars as $car)
        {
            echo "$car->getName() <br>";
        }

        return new Response('ma akal');
        //return $this->render('OBCarsTest1Bundle:Default:index.html.twig', array('UserCars' => $UserCars));
    }

这里有两个问题:

  1. 数组索引是基于0的,您使用$a = 1;,因此您可能会错过第一个元素;

  2. 您不应该使用这样的while循环在数组上循环循环,因为您将始终遇到问题/错误/警告,如果没有更多的元素,此循环以定义为警告:

    while($UserCars[$a]->getId() != Null)

    相反,您应该使用foreach循环在每个元素上循环:

    foreach ($UserCars as $UserCar) { // not sure if you need this, I would guess you don't: if ($UserCar->getId() != Null) { ...

重构代码使用foreach。如果您要做的就是迭代汽车阵列并打印每辆汽车的名称,那么这应该可以完成工作。我已经删除了不需要说明这一点的部分。

class UserController extends Controller
{   
    public function indexAction()
    {
        $UserCars = array(...);
        foreach ($UserCars as $Car) {
            if (is_a($Car, 'UserCar')) {
                echo ('Created user :  ' . $Car->getName());    
            }
        }
    }
}

您可能还想做的事情作为预防措施,可以验证每个 $UserCar的身份,以确保在调用方法之前确保它是您认为的。这就是is_a方法所做的(我已经对您的班级名称进行了猜测)。

如果您真的想要way loop:

   $count_cars = count($UserCars);
   $i = 0;
   while($count_cars > 0)
   {
       echo ('Created user :  '.$UserCars[$i]->getName());
       //return new Response('Created user :  '.$UserCars[$a]->getId());
       $count_cars--;
       $i++;
    }

无需检查汽车是否具有ID,因为您从存储库中获得它,显然会有一个ID。但是foreach更容易..不需要额外的变量($ i,$ count_cars)

相关内容

  • 没有找到相关文章

最新更新