我正在創建一個應用程式,我想讓用戶能夠更改他們的資料和密碼。我已經創建了一個更改電子郵件的表單,它可以作業,但我在密碼方面遇到了問題。 我有一個頁面localhost:8000/user/{id},這里有兩個按鈕:編輯電子郵件和編輯密碼。編輯電子郵件可以作業,當我點擊編輯密碼時,我在localhost:8000/user/{id}/change_password上得到一個空白頁 (在此輸入圖片描述 在此輸入圖片描述) 。這個PassType不顯示在那里。
沒有語法問題。
在localhost:8000/user/{id}和localhost:8000/user/{id}/change_password上沒有語法錯誤。
我在UserController中加入了edit_pass函式,創建了PassType(修改密碼的表單在哪里),并制作了edit_password.html.twig模板。
我不知道哪里出了問題。我做了和其他表單一樣的事情,這些表單都能作業。我試著清除edit_password模板(我只是把base_html留在那里,放了一些文本),因為我認為其中有問題,但在localhost:8000/user/{id}/change_password上仍然是一個空白頁。
密碼型別:
<?php
/*
* 密碼型別。
*/
namespace AppForm。
use AppEntityUser;
使用 SymfonyComponentFormAbstractType。
使用 SymfonyComponentFormExtensionCoreTypePasswordType。
use SymfonyComponentFormExtensionCoreTypeRepeatedType。
使用 SymfonyComponentFormFormBuilderInterface。
使用 SymfonyComponentOptionsResolverOptionsResolver。
/**。
*類PassType。
*/
class PassType extends AbstractType
{
/**。
* 構建表單。
*
* 這個方法是為層次結構中的每個型別呼叫的,從最上面的型別開始。
* 最上面的型別。型別擴展可以進一步修改表單。
*
* @see FormTypeExtensionInterface::buildForm()
*
* @param FormBuilderInterface $builder 表格生成器
* @param array $options 選項。
*/
public function buildForm(FormBuilderInterface$builder, array $options)。) void: $options.
{
$builder->add(
'password'。
RepeatedType::class,
[
'type' => PassType::class,
'required' => true。
'attr' => ['max_length' => 40] 。
'first_options' => ['label' => 'label.password'] 。
'second_options' => ['label' => 'label.repeatword']。
]
);
}
/**。
* 配置該型別的選項。
*
* @param OptionsResolver $resolver 選項的決議器。
*/
public function configureOptions(OptionsResolver $resolver) 。void: $resolver.
{
$resolver->setDefaults(['data_class' => User::class])。
}
/**。
* 回傳此型別的模板塊名稱的前綴。
*
* 塊的前綴默認為下劃線的短類名,去掉 "Type "后綴。
* 去掉 "Type "后綴(例如:"UserProfileType" => "user_profile")。
*
* @return string 模板塊名稱的前綴
*/
public function getBlockPrefix()。string
{
return 'user'/span>。
}
}
edit_password.html.twig
{% extends 'base.html.twig' %}
{%block title %}
{{ 'title_password_edit'|trans({'%id%': user.id|default(' ' )}) }}
{% endblock %}}
{% block body %} {% block body %}
< h1 class="display4 d- flex justify-content-center" > {{ 'title_password_edit'|trans({'%id%': 用戶。 id|default(''/span>)}) }}</h1>
{{ form_start(form, { method: 'PUT', action: url('password_edit', {id: user.id}) }) }}
{{ form_widget(form) }}}
< div class="form-group row float-sm-right" >
<input type="submit" value="{{ 'action_save'|trans }}" class="btn btn-primary" />
</div>
<div class="form-group row float-sm-left">
<a href="{{url('user_index') }}" class="btn btn-link">
{{'action_back_to_list'|trans }}}。
</a>
</div>
{{ form_end(form) }}}
{% endblock %}}
和UserController的一部分,有edit_pass函式
/**.
* 編輯密碼。
*
* @param SymfonyComponentHttpFoundationRequest $request HTTP請求。
* @param AppEntityUser $user 用戶物體
@param AppRepositoryUserRepository $repository User repository
*
* @return SymfonyComponentHttpFoundationResponse HTTP response
*
* @throws DoctrineORMORMException
* @throws DoctrineORMOptimisticLockException
*
* @Route(
* "/{id}/change_password",
* methods={"GET", "PUT"},
* requirements={"id": "[1-9]d*"},
* name="password_edit",
* )
*/
public function edit_pass(Request $request, 用戶 $user, UserPasswordEncoderInterface $passwordEncoder, UserRepository $repository)。) Response: Response.
{
$form = $this->createForm(PassType:: class, $user, ['method' => 'PUT'])。)
$form-> handleRequest($request)。
if ($form->isSubmitted() && $form->isValid() ) {
$user->setPassword(
$passwordEncoder->encodePassword(
$user,
$form->get('password'/span>)->getData()
)
);
$repository-> save($user);
$this->addFlash('success', 'message.uped_successfully')。
return $this-> redirectToRoute('user_show', array('id' => $this-> getUser()-> getId());
}
return $this-> render(
'user/edit_password.html.twig'。
[
'form' => $form->createView()。
'user' => $user,
]
);
}
我也在添加user/show.html.twig
{% extends 'base.html.twig' %}。
{%block title %}
{{ 'label_detail_users'|trans({'%id%': user.id|default(' )}) }}
{% endblock %}}
{% block body %} {% block body %}
< h1 class="display4 d- flex justify-content-center" > {{ 'label_detail_users'/span>|trans({'%id%'/span>: 用戶。 id|default(''/span>)}) }}</h1>
{% if users is defined and users|length %}
<table class="table table-striped" >
<thead>
<tr>
<th>{{'label_user_id'|trans }}</th>
<th>{{ 'label_email'|trans }}</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{ users.id }}</td>
<td>{{ users.email }}</td>
</tr>
</tbody>
</table>
<p>
<a class="btn btn-info" href="{ url('user_edit', {id: users. id}) }}" title="{{ 'edit_email'|trans }}">
{{'edit_email'|trans }}}
</a>
</p>
<p>
<a class="btn btn-info" href="{url('password_edit'/span>, {id: users. id}) }}" title="{{ 'edit_password'|trans }}">
{{'edit_password'|trans }}}
</a>
</p>
<p>
< a class="btn btn-info" href="{{ url('user_index') }}" title="{{ 'action_back_to_list'|trans }}">
{{'action_back_to_list'|trans }}{{'action_back_to_list'|trans }}
</a>
</p>
{% else %}
<p>
{{ 'message_item_not_found'|trans }}}
</p>
{% endif %}{% endif %}
{% endblock %} {% endblock %}
uj5u.com熱心網友回復:
你產生了一個無盡的回圈--它的PasswordType在你的RepeatedType中。PassType是你的整個表單的名稱 - 你看到了問題所在嗎?
public function buildForm(FormBuilderInterface $builder, array $options)。) void: $options.
{
$builder->add(
'password'。
RepeatedType::class,
[
'type' => PasswordType::class,
'required' => true。
'attr' => ['max_length' => 40] 。
'first_options' => ['label' => 'label.password'] 。
'second_options' => ['label' => 'label.repeatword']。
]
);
}
請問您為什么要限制密碼的長度?
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/310764.html
標籤:
下一篇:物體在symfony中顯示問題
