Вам придется переопределить эти методы в вашем LoginController, просто вставьте это и измените соответствующим образом.
Измените имя поля по умолчанию email
на cpf
:
public function username()
{
return 'cpf'; // or whatever field you use to login
}
Выполните здесь проверку с учетными данными:
protected function validateLogin(Request $request)
{
$request->validate([
$this->username() => 'required|string|exists:users,cpf',
]);
}
Выполните запрос на вход. Здесь мы ищем пользователя, затем регистрируем его вручную и перенаправляем на панель управления (домой), если это не удается, вы будете перенаправлены обратно со входом, который был вставлен в форму:
public function login(Request $request)
{
$this->validateLogin($request);
$user = User::where('cpf', $request->cpf)->first();
if ($user) {
Auth::login($user);
return redirect()->intended('home');
}
return redirect()->back()->withInput($request->all());
}
[1111 ] Таблица БД, с которой я тестировал:
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('cpf')->unique();
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->rememberToken();
$table->timestamps();
});
Благодаря подсказке Epaga и нескольким примерам в Сети (не настолько очевидный для нахождения! Я использовал главным образом Повреждение Строка для текстового расположения), я мог сделать компонент для отображения перенесенного текста. Это неполно, но по крайней мере это показывает намеченный эффект.
class TextContainer extends JPanel
{
private int m_width;
private int m_height;
private String m_text;
private AttributedCharacterIterator m_iterator;
private int m_start;
private int m_end;
public TextContainer(String text, int width, int height)
{
m_text = text;
m_width = width;
m_height = height;
AttributedString styledText = new AttributedString(text);
m_iterator = styledText.getIterator();
m_start = m_iterator.getBeginIndex();
m_end = m_iterator.getEndIndex();
}
public String getText()
{
return m_text;
}
public Dimension getPreferredSize()
{
return new Dimension(m_width, m_height);
}
public void paint(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
FontRenderContext frc = g2.getFontRenderContext();
LineBreakMeasurer measurer = new LineBreakMeasurer(m_iterator, frc);
measurer.setPosition(m_start);
float x = 0, y = 0;
while (measurer.getPosition() < m_end)
{
TextLayout layout = measurer.nextLayout(m_width);
y += layout.getAscent();
float dx = layout.isLeftToRight() ?
0 : m_width - layout.getAdvance();
layout.draw(g2, x + dx, y);
y += layout.getDescent() + layout.getLeading();
}
}
}
Только для забавы, я сделал его соответствующий кругу (увы, никакое выравнивание, это кажется):
public void paint(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
FontRenderContext frc = g2.getFontRenderContext();
LineBreakMeasurer measurer = new LineBreakMeasurer(m_iterator, frc);
measurer.setPosition(m_start);
float y = 0;
while (measurer.getPosition() < m_end)
{
double ix = Math.sqrt((m_width / 2 - y) * y);
float x = m_width / 2.0F - (float) ix;
int width = (int) ix * 2;
TextLayout layout = measurer.nextLayout(width);
y += layout.getAscent();
float dx = layout.isLeftToRight() ?
0 : width - layout.getAdvance();
layout.draw(g2, x + dx, y);
y += layout.getDescent() + layout.getLeading();
}
}
Я не слишком уверен в дуплексном вычислении, все же.
java.awt.font. TextLayout мог бы быть полезным. Вот отрывок их примера кода:
Graphics2D g = ...;
Point2D loc = ...;
Font font = Font.getFont("Helvetica-bold-italic");
FontRenderContext frc = g.getFontRenderContext();
TextLayout layout = new TextLayout("This is a string", font, frc);
layout.draw(g, (float)loc.getX(), (float)loc.getY());
Rectangle2D bounds = layout.getBounds();
bounds.setRect(bounds.getX()+loc.getX(),
bounds.getY()+loc.getY(),
bounds.getWidth(),
bounds.getHeight());
g.draw(bounds);
Иначе Вы могли всегда использовать текстовый элемент Swing, чтобы сделать задание для Вас, просто передать в Графике, в которую Вы хотите, чтобы оно нарисовало.
Можно использовать JLabel и встроить текст с HTML.
JLabel.setText("<html>"+line1+"<br>"+line2);
Инкрементно создайте свою строку, одно слово за один раз, с помощью метода Epaga для нахождения длины строки. После того как длина дольше, чем Ваш прямоугольник, удалите последнее слово и печать. Повторитесь, пока у Вас не закончатся слова.
Это походит на плохой алгоритм, но для каждой строки, это действительно O (screenWidth/averageCharacterWidth) => O (1).
Однако, используйте StringBuffer для создания строки!