2013-11-28 2 views
0

Хорошо, поэтому длинный заголовок, но извинения, он только способ описать его, не получив неправильного ответа.Как справиться с переменными, которые не могут быть установлены при использовании механизма шаблонов лезвий для создания форм.

Таким образом, сценарий ....

Я создаю сайт, который имеет форму поиска сортов в заголовке, и, следовательно, на каждой странице. Я бы хотел, чтобы он сохранил свои предыдущие переменные при использовании для удобства пользователей, для моего удобства я построил форму в макете по умолчанию, чтобы сохранить воссоздание многих экземпляров.

default.blade.php (Heres форма, с ненужной разметки удалены)

{{ Form::open(array('url' => '/search')) }} 
{{ Form::select('model', Photo::getAvailableModels(true), $model) }} 
{{ Form::select('colour', Photo::getAvailableColours(true), $colour) }} 
{{ Form::submit('Go') }} 
{{ Form::close() }} 

в $ модель & $ цвета являются переменными Я захватывая во время поста. Проблема в том, что я получаю неустановленные переменные ошибки от Blade на любых страницах, на которых пользователь не отправил сообщения, поэтому я буквально должен их предварительно настроить почти в каждом маршруте или контроллере на всем моем сайте, чтобы предотвратить ошибки.

В сущности, система работает нормально, пока пользователь отправляет сообщения, если кто-то посещает сайт, используя прямую ссылку, в основном бесполезно.

Очевидно, что я не могу установить форму поиска по ранее найденным результатам, но это будет плохой практикой с точки зрения удобства использования.

Я пропустил что-то здесь, конечно, должно быть простое решение. Спасибо за любую помощь.

ответ

2

Создать вид композитора для сильно используемых переменных:

View::composer(['store.index', 'products.*'], function($view) 
{ 

    $model = Input::get('model') ?: 'modelX'; 
    $colour = Input::get('colour') ?: 'colourY'; 

    $view->with('model', $model); 
    $view->with('colour', $colour); 

}); 

Laravel будет передавать эти переменные с представлениями автоматически, каждый раз, когда кто-то ударил одного из них.

Вы можете поместить это в файл маршрутов, фильтрует файл или, как, мне, создать приложение/composers.php и нагрузки путем добавления

require app_path().'/composers.php'; 

Для вашего приложения/запуска/global.php.

+0

Спасибо, очень чистый решение, безусловно, похоже на хороший уровень повторного использования. Спасибо. – j5Dev

0

Вы можете проверить, являются ли переменные установлены или не с PHP isset():

{{ Form::open(array('url' => '/search')) }} 

@if (isset($model) && isset($colour)) 
    {{ Form::select('model', Photo::getAvailableModels(true), $model) }} 
    {{ Form::select('colour', Photo::getAvailableColours(true), $colour) }} 
@else 
    {{ Form::select('model', Photo::getAvailableModels(true)) }} 
    {{ Form::select('colour', Photo::getAvailableColours(true)) }} 
@endif 

{{ Form::submit('Go') }} 
{{ Form::close() }} 

Или, если ваши поля формы являются обязательными, и вы должны проверить отдельно:

{{ Form::open(array('url' => '/search')) }} 
@if (isset($model)) 
    {{ Form::select('model', Photo::getAvailableModels(true), $model) }} 
@else 
    {{ Form::select('model', Photo::getAvailableModels(true)) }} 
@endif 

@if (isset($colour)) 
    {{ Form::select('colour', Photo::getAvailableColours(true), $colour) }} 
@else 
    {{ Form::select('colour', Photo::getAvailableColours(true)) }} 
@endif 

{{ Form::submit('Go') }} 
{{ Form::close() }} 
+0

Хотя это сработает, это просто не кажется таким элегантным, как решение, предлагаемое Антонио. Однако, все же очень жизнеспособный ответ, спасибо. – j5Dev

+0

Согласен! Ответ Антонио - это путь. Но это не вредно знать все возможности :) –

+0

Мануэль, проблема, которую я вижу с твоими, заключается в том, что представления не должны знать о существовании моделей, по крайней мере для меня, это не внутри представления: 'Фото: : '. –

Смежные вопросы