Передача переменной из одного представления в другое представление - Laravel 5.1

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

Я хочу разместить две кнопки на своей домашней странице (Writer & Reader), которые направят их на страницу регистрации и поместят профессию в виде скрытого поля в форме.

Моя домашняя страница:

    {!! Form::open(['route' => ['writer_path']]) !!}
    {!! Form::hidden('profession', 'writer') !!}
    {!! Form::submit('Writer', array('class' => 'btn btn-warning')) !!}
    {!! Form::close() !!}

Мои маршруты.php

   Route::post('auth/register', [
     'as' => 'writer_path',
     'uses' => 'ProfessionController@displayForm'
   ]);

Профессионконтроллер.php

   class ProfessionController extends Controller
    {
      //
   public function displayForm()
   {
    $input = Input::get();
    $profession = $input['profession'];
    return view('auth/register', ['profession' => $profession]);
   }
}

Когда я нажимаю на кнопку, ничего не происходит. Когда я проверяю «Инструменты разработчика»> «Сеть», прежде чем я нажму кнопку, регистрация не появляется, однако, когда я нажимаю, она появляется, но она никуда меня не направляет.

Когда туда приходит регистр, он также показывает длинную полосу в таймлайме и initiator = Other. Когда я нажимаю «Регистрация», а затем Preview, появляется Failed to load response data. Есть ли у вас какие-либо идеи?


Изменить:

  • Я использую Laravel 5.1 + Laravel Collective.

Исходный код:

 <form method="POST" action="http://app.com/auth/register" accept-charset="UTF-8"><input name="_token" type="hidden" value="qq1exVYYTrmuRBrj62HGgOxJWidUK770lF5Wv1qH">
 <input name="profession" type="hidden" value="writer">
 <input class="btn btn-warning" type="submit" value="Writer">
 </form>
  • когда я нажимаю Инструменты разработчика Chrome> Источники> Источники> auth/register, я получаю сообщение об ошибке (только один раз. В других случаях регистрация под Sources не отображается):

TokenMismatchException в /home/vagrant/Code/Laravel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php, строка 53:


Редактировать 2:


person senty    schedule 05.08.2015    source источник
comment
Вы используете коллективную форму laravel? В Laravel 5.* больше нет конструкторов форм, которые мы использовали в 4.*. Кроме того, проверьте элемент формы, чтобы убедиться, что он правильно переводится в html.   -  person Victor    schedule 05.08.2015
comment
Я использую Laravel 5.1. Внесение правок в ОП.   -  person senty    schedule 05.08.2015


Ответы (2)


Здесь происходит несколько вещей.

Помимо того, что я только что упомянул в комментариях (вы регистрируете два маршрута, которые делают разные вещи по одному и тому же пути, а именно

Route::post('auth/register', [
'as' => 'writer_path',
'uses' => 'ProfessionController@displayForm'
 ]);

и

Route::post('auth/register', 'Auth\AuthController@postRegister');

) Они сосуществуют в одном и том же файле route.php, и могут возникнуть конфликты, если URL-адреса одинаковы.

Кроме того, ваш

public function displayForm()
{
    $input = Input::get();
    $profession = $input['profession'];
    return view('auth/register', ['profession' => $profession]);
}

возвращается как представление, маршрут, а не именованный маршрут, как в инструкциях:

public function displayForm()
{
$input = Input::get();
$profession = $input['profession'];
return view('writerregistration', ['profession' => $profession]);

}

Это, как я уже сказал, должно направить вас к представлению, которое вы создадите в файле с именем authorregistration.blade.php, где вы должны поместить код в форме, которую я передал здесь внизу моего ответа:

Laravel передает данные из одного представления в другой вид

person tigerbluejay    schedule 05.08.2015
comment
Вы совершенно правы. Большое спасибо за вашу огромную помощь. Теперь все работает отлично. Что я сделал, так это изменил маршрут на register вместо auth/register и поставил \ перед вводом. Теперь он успешно направляет меня к domain.com/register, но получает $profession. Однако, когда я нажимаю кнопку «Регистрация», он выдает MethodNotAllowedHttpException. Это потому, что кнопка и методы регистрации работают только в маршруте auth/register, и поэтому они не работают в маршруте domain.com/register? - person senty; 05.08.2015
comment
Если вы имеете в виду кнопку регистрации в полной регистрационной форме (где она запрашивает имя пользователя, пароль и т. д.), то есть конечный шаг процесса, который я описал в исходном вопросе, то причина может заключаться в том, что нет никаких действий. указано в элементе Form::open(), поэтому laravel не знает, что делать, когда вы нажимаете кнопку регистрации. Вы должны указать ему, по какому маршруту идти или какое действие предпринять (какой контроллер и метод использовать) в элементе Form::open() регистрационной формы. - person tigerbluejay; 05.08.2015
comment
Я продолжаю читать ваши ответы мне туда и обратно. Большое спасибо еще раз. Теперь предположим, что я нажал кнопку writer и перешел на register. Все успешно загрузилось (я имею в виду, что основная регистрационная форма обычно находится в auth/register). И это маршрут, который я обычно использую для регистрации пользователя Route::post('auth/register', 'Auth\AuthController@postRegister');. Я попытался добавить другой маршрут: Route::post('register', 'Auth\AuthController@postRegister');, но все равно получаю ту же ошибку. Где я пропал? - person senty; 05.08.2015
comment
попробуйте поменять местами 'register' и 'auth/register' в вашем файле route.php, чтобы у вас был Route::post('register', [ 'as' =› 'writer_path', 'uses' =› 'ProfessionController@displayForm'] ); и Route::post('auth/register'), 'Auth\AuthController@postRegister'); в качестве маршрута регистрации. Надеюсь, это поможет. - person tigerbluejay; 05.08.2015

попробуйте добавить 'метод' в Form::open

{!! Form::open(['route' => ['writer_path'], 'method' => 'POST']) !!}

и используйте «\» на «Вводе» на контроллере

$input = \Input::get();
person Ravisha Hesh    schedule 05.08.2015
comment
такая же проблема происходит. :/ Здесь я объяснил с некоторыми фотографиями из инструментов разработчика. laravel. ио/форум/ - person senty; 05.08.2015
comment
что получится, если вы добавите следующее после $profession = $input['profession'];? dd($profession); - person Ravisha Hesh; 05.08.2015
comment
Когда я ставлю dd($profession); после $profession = $input['profession'];, я не получаю вывода. Все равно ничего не происходит - person senty; 05.08.2015
comment
Я пробовал ваш код в новом проекте laravel. Это работает нормально. Вместо имен файлов я использовал WelcomeController и welcome.blade. https://drive.google.com/file/d/0B9ajHAkB-0-mT2pGT24wRUJRbVE/view?usp=sharing - person Ravisha Hesh; 05.08.2015
comment
Почему в моем проекте этого не происходит :(? Вы что-то меняли? - person senty; 05.08.2015
comment
нет, я изменил только \ и метод => сообщение Вы пробовали проект по ссылке? - person Ravisha Hesh; 05.08.2015
comment
Я не запускал проект, но я пробовал поставить `\` и method => post в своем проекте, но не повезло :( - person senty; 05.08.2015
comment
Повторите попытку без ПО промежуточного слоя VerifyCsrfToken. - person Ravisha Hesh; 05.08.2015
comment
Как я могу это устранить? В моем случае кнопка просто обновляет страницу :/ - person senty; 05.08.2015
comment
Комментарий \App\Http\Middleware\VerifyCsrfToken::class, из app-›Http-›Kernel.php - person Ravisha Hesh; 05.08.2015
comment
Я закомментировал это, но все равно просто обновляет страницу :( Консоль показывает только navigated to the bla.com - person senty; 05.08.2015
comment
Я видел ваш код в laravel.io, попробуйте прокомментировать два маршрута: Route::get('auth/register', 'Auth\AuthController@getRegister'); Route::post('auth/register', 'Auth\AuthController@postRegister'); - person tigerbluejay; 05.08.2015
comment
Возможно, существует конфликт маршрутов, поскольку вы определяете два маршрута сообщений с одним и тем же URL-адресом (тот, что в моем примере, и тот, который у вас был раньше) - person tigerbluejay; 05.08.2015