Laravel 4. Передача параметра в partial

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

проекты/создать.blade.php:

@include("partials.NewProjectForm", array("cancel" => "no"))

примечания к продажам/create.blade.php:

@include("partials.NewProjectForm", array("cancel" => "yes"))

частичные/NewProjectForm.blade.php:

@if($cancel == "yes")
  {{ Form::button("Cancel") }}
@endif

В случае «нет» партиал получает переданную переменную, как и ожидалось, однако в случае «да» он выдает ошибку «Неопределенная переменная: отмена». Я также попытался включить партиал с View::make()->with() с тем же результатом. Что там не так?

Спасибо.


person Malvolio    schedule 08.08.2014    source источник


Ответы (2)


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

Предполагая, что у вас есть каталог partials в представлениях, который содержит файл с именем header.blade.php, добавьте следующую строку в сценарий просмотра, из которого вы хотите отобразить партиал:

{{ View::make('partials.blog.header', array('title' => 'test'))  }}

Если вы поместите следующую строку в header.blade.php, вы увидите, что «тест» был передан вашему партиалу, и ваш партиал был отрендерен.

{{ $title }}

Надеюсь, это поможет! (Я тоже был смущен этим, когда впервые столкнулся с этим...)

person lostphilosopher    schedule 18.11.2014

С вашим кодом все в порядке... Эта ошибка могла быть вызвана другим вызовом частичного вызова, в котором "отмена" была написана с ошибкой или отсутствовала. Возможно, был развернут неправильный файл «salesnotes/create.blade.php» или маршрут «salesnote» был направлен на другую страницу, содержащую партиал без установки переменной «отмена»?

Кстати, это не решает вашу проблему, но если вы создаете общий фрагмент, предложите добавить проверку isset($cancel) перед проверкой значения $cancel.

person perNalin    schedule 04.01.2015
comment
Спасибо потерянный философ, спасибо perNalin! Наконец-то я пришел к совершенно другому, но успешному подходу, забыв о передаче переменных в партиалы: я просто загружаю формы в зависимости от контекста через вызов ajax в соответствующие div и обрабатываю их с помощью javascript. - person Malvolio; 05.01.2015