我正在与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));
}
这里有两个问题:
-
数组索引是基于0的,您使用
$a = 1;
,因此您可能会错过第一个元素; -
您不应该使用这样的
。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)