我正在制作一个inlog表单,用户可以决定将此用户名或电子邮件地址与其密码结合使用。所以通常它会像SQL中的((用户名或电子邮件)和密码)。使用以下控制器代码只知道如何添加OR函数。
ls *.mp3 | xargs -n 1 -I {} ffmpeg -i {} -c:a libfaac -vn $(basename {} .mp3).m4a
两者都是使用的getUsername,因为这是表格中的闪烁。
答案 0 :(得分:1)
实际上默认原则->orBy(...)
中没有EntityRepository
方法
您可以在此课程的API中找到所有可用的方法。
相反,请使用QueryBuilder
:
$query = $this->getDoctrine()
->getRepository('Bundle:CusUser')
->createQueryBuilder('u')
->select('u')
->where('u.username = :username')
->orWhere('u.email = :email')
->setParameter('username', $user->getUsername())
->setParameter('email', $user->getEmail())
->getQuery();
// Get the first result
$user = $query->setMaxResults(1)->getSingleResult();
将其放入自定义EntityRepository
中,并将其与您用作where
和orWhere
语句参数的参数数组一起使用。例如:
public function findByOrBy(array $parameters)
{
$query = $this->getEntityManager()->createQueryBuilder();
// ...
foreach ($parameters as $property => $value) {
$query
->orWhere($property.' = :'.$property)
->setParameter($property, $value)
// ...
}
}
您可以在QueryBuilder
API中找到可用方法的列表(几乎所有本机SQL方法的对应关系)。
答案 1 :(得分:0)
FOSUserBundle具有类似的功能,允许用户使用电子邮件或用户名登录。
他们只是检查用户输入是否是电子邮件:
来自第102行的friendsofsymfony/user-bundle/Model/UserManager.php
/**
* Finds a user either by email, or username
*
* @param string $usernameOrEmail
*
* @return UserInterface
*/
public function findUserByUsernameOrEmail($usernameOrEmail)
{
if (filter_var($usernameOrEmail, FILTER_VALIDATE_EMAIL)) {
return $this->findUserByEmail($usernameOrEmail);
}
return $this->findUserByUsername($usernameOrEmail);
}
所以在你的控制器中你可以拥有这个:
public function loginAction()
{
//...
if (filter_var($usernameOrEmail, FILTER_VALIDATE_EMAIL)) {
$user = $this->get('doctrine')
->getRepository('Bundle:CusUser')
->findOneBy(array('email' => $usernameOrEmail, 'password' => $password));
}
else {
$user = $this->get('doctrine')
->getRepository('Bundle:CusUser')
->findOneBy(array('username' => $usernameOrEmail, 'password' => $password));
}
//...
}
希望这有帮助