Получить входные значения из файла ветки в Symfony Controller - PullRequest
0 голосов
/ 20 февраля 2020

Я пытаюсь проверить введенное имя пользователя, которое хранится в базе данных, но значение, которое я получаю из ввода в NULL при попытке "var_dump ($ username);", что я делаю неправильно?

Вот мой контроллер класса

 <?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use App\Entity\Admin;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;

   class LoginController extends AbstractController
     {

    /**
      * @Route("/admin", name="admin")
 */
public function connect_admin(Request $request)
{

    $username= $request->query->get('username');

    $repository = $this->getDoctrine()->getRepository(Admin::class);


    $user =  $repository->findOneBy(['user' => $username]);

    var_dump($username);
    if ($user) {
        $message = "Success";
        echo "<script type='text/javascript'>alert('$message');</script>";
        return $this->render('site/admin.html.twig');

    }

   else{
    $message = "Try again";


    echo "<script type='text/javascript'>alert('$message');</script>";
   }


}



   }

Форма:

<form class="login100-form validate-form flex-sb flex-w" method="GET" action="LoginController.php">

и это то, что сделал в кнопке href

<a class="login100-form-btn" name="button_save" id="button_save" href="{{ path('admin') }}">
                        Login
</a>

Ответы [ 2 ]

0 голосов
/ 24 февраля 2020

Кнопка отправки должна быть в форме и лучше использовать метод post, и действие должно указывать на маршрут, а не на контроллере, поэтому попробуйте следующее:

<form class="login100-form validate-form flex-sb flex-w" method="POST" action="{{path('admin')}}">

 <input type="text" name="username" />
 <input type="submit">

</form>

Контроллер

/**
 * @Route("/admin", name="admin")
 */
public function connect_admin(Request $request)
{

// use request->get not query->get
$username= $request->request->get('username');

$repository = $this->getDoctrine()->getRepository(Admin::class);

// find one by username not by user
$user =  $repository->findOneBy(['username' => $username]);

var_dump($username);
if ($user) {
    $message = "Success";
    echo "<script type='text/javascript'>alert('$message');</script>";
    return $this->render('site/admin.html.twig');

}

else{
$message = "Try again";


echo "<script type='text/javascript'>alert('$message');</script>";
}
0 голосов
/ 21 февраля 2020

Попробуйте,

Добавьте идентификатор в форму:

<form class="login100-form validate-form flex-sb flex-w" id="myForm" method="GET" action="{{ path('admin') }}">

Измените ссылку для входа в систему:

<a class="login100-form-btn" name="button_save" id="button_save" href="javascript:$('#myForm').submit();">Login</a>

Теперь при нажатии на ссылку для входа он должен отправить форму для действия connect_admin. Теперь вы можете получить доступ к отправленным значениям в вашем контроллере, используя

$request->query->get('field_name');
...