Я создаю систему аутентификации, которая использует Slim 3 PHP на серверной части и Angular на клиентской части. До сих пор мне удавалось получить его, чтобы пользователь мог заполнить форму во внешнем интерфейсе и отправить запрос на отправку серверу для вставки этих данных в таблицу базы данных.
Angular Register Component:
this.Auth.postUserDetails(username, password).subscribe(data => {
console.log(data, 'is what we received from the backend:');
});
Служба угловой аутентификации:
postUserDetails(username, password) {
return this.http.post('/api/achievement-forum-api/src/public/register',
{username, password});
}
Но на бэкэнде у меня есть некоторая проверка формы, которая выдает некоторые сообщения, когда говорят, что пароль меньше 8 символов, который находится вформа класса, расширяющая класс LogicException в PHP.
use Throwable;
class InvalidFormData extends \LogicException
{
public function __construct($message = "Password must be at least 8 characters", $code = 0, Throwable $previous = null)
{
parent::__construct($message, $code, $previous);
}
}
Эти InvalidFormData генерируются при сбое проверки в конструкторе класса Password, где происходит проверка паролей:
public function __construct(string $tainted_password)
{
$cleaned_password = filter_var($tainted_password, FILTER_SANITIZE_STRING);
if ($this->isTooShort($cleaned_password))
throw new InvalidFormData();
$this->password = $cleaned_password;
}
Затем, наконец, в классе контроллера мы пытаемсязарегистрируйте пользователя, но если мы поймаем исключение InvalidFormData, мы извлечем созданное сообщение.
public function registerUser($request, $response)
{
$tainted_username = $request->getParsedBody()['username'];
$tainted_password = $request->getParsedBody()['password'];
try
{
$this->authenticationService->registerUser($tainted_username, $tainted_password);
}
catch(InvalidFormData $e)
{
var_dump($e→getMessage()); //shows the message in the browsers console
}
}
Вопрос:
Что я хотел бы сделать, это передать это сообщение в интерфейс Angular и отобразить его в форме, чтобы пользователь могудалось понять, почему они не прошли проверку.
Я прочитал документацию по ответам Slim 3, но я не уверен, если бы мне пришлось отправлять это сообщение обратно в качестве ответа Slim, и если да, то как мне перехватить это в Angular? Сначала я подумал, что мне может потребоваться запрос get в angular, чтобы получить сообщение, но я уверен, что есть способ сделать это в исходном запросе post.
Я прочитал некоторую документацию по Angular, и мне кажется, что мне нужно что-то сделать в методе подписки, но я не совсем уверен, что.
Надеюсь, кто-то может показать мне несколько примеров кодаэтого процесса. Как мне создать ответ Slim 3, содержащий сообщение, и как я могу записать его в Angular?