У меня есть форма входа, которую я хочу повторно использовать в различных контекстах. Например, мне нужна страница только с логином (www.mysite.com/login), но я также хочу использовать форму входа на моей главной странице (www.mysite.com).
Документация Laravel предлагает следующий метод использования подпредставлений для профиля пользователя.
<!-- Stored in app/controllers/UserController.php -->
class UserController extends BaseController {
/**
* The layout that should be used for responses.
*/
protected $layout = 'layouts.master';
/**
* Show the user profile.
*/
public function showProfile()
{
$this->layout->content = View::make('user.profile');
}
}
<!-- Stored in app/views/layouts/master.blade.php -->
<html>
<body>
@section('sidebar')
This is the master sidebar.
@show
<div class="container">
@yield('content')
</div>
</body>
</html>
<!-- Stored in app/views/user/profile.blade.php -->
@extends('layouts.master')
@section('sidebar')
<p>This is appended to the master sidebar.</p>
@stop
@section('content')
<p>This is my body content.</p>
@stop
Проблема в том, что подпредставление «загрязнено» кодом, делающим его дочерним элементом представления layouts.master. Поскольку я хочу, чтобы мою форму входа можно было повторно использовать в различных макетах, мне не нужны какие-либо ссылки на конкретный макет, в котором она должна использоваться.
Я полагаю, что могу вызвать это в представлении как переменную представления:
{{ $login }}
Затем реализуйте это с помощью контроллера следующим образом:
$this->someview->login = View::make('user.login');
Таким образом, мой вход в систему может быть чистым:
<!-- Stored in app/views/user/login.php -->
<form method="post" action="{{ URL::to('/') }}/login" accept-charset="utf-8">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<fieldset>
<legend>credentials</legend>
<label>
<span>email</span>
<input name="email" type="email" placeholder="[email protected]" tabindex="1" required autofocus>
</label>
<label>
<span>password</span>
<input name="password" type="password" placeholder="password" tabindex="2" required>
</label>
</fieldset>
<input type="submit" value="login">
</form>
Это лучший способ вставлять подпредставления без жесткого кодирования макета, в котором его следует использовать?
Я должен быть честным, я вижу силу в определении макетов для конкретных представлений, поскольку это дает возможность загрузить представление, и система автоматически находит макет, но разве это не противоречит понятию сухого кодирования?