【问题标题】:Passing Variable From One View to Another View - Laravel 5.1将变量从一个视图传递到另一个视图 - Laravel 5.1
【发布时间】:2015-10-27 13:55:19
【问题描述】:

在回答了我之前的问题后,我复制了最佳答案所说的所有内容,它对他非常有效,而对我却不适用。

我想在我的主页(作家和读者)上放置两个按钮,将他们引导到注册页面并将专业作为隐藏字段放在表单中。

我的主页:

    {!! 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'
   ]);

ProfessionController.php

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

当我点击按钮时,什么也没有发生。当我检查开发者工具 > 网络时,在我点击按钮之前,注册似乎没有,但是当我点击它时它会出现,但它并没有将我引导到任何地方。

当 register 出现时,它还会在时间轴和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 下没有显示注册):

/home/vagrant/Code/Laravel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php 第 53 行中的 TokenMismatchException:


编辑 2:

【问题讨论】:

  • 你在使用laravel collective form吗? Laravel 5.* 不再具有我们在 4.* 中使用的表单构建器。另外,请检查表单的元素以确保它正确地转换为 html。
  • 我使用的是 Laravel 5.1。向 OP 添加编辑。

标签: php html laravel laravel-5.1


【解决方案1】:

这里发生了几件事。

除了我刚才在 cmets 中提到的 (您正在注册两条在同一路径下执行不同操作的路由,即

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

和

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

) 它们共存于同一个 routes.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]);

}

正如我所说,这应该引导您进入一个视图,您将在一个名为 writerregistration.blade.php 的文件中创建该视图,您应该将代码以我在答案底部传递的形式放在该文件中:

Laravel Passing Data From One View to Another View

【讨论】:

  • 你完全正确。非常感谢您的大力帮助。现在,一切正常。我所做的是将路由更改为register 而不是auth/register,并在输入之前放置一个“\”。它现在成功地将我定向到domain.com/register,但得到了$profession。但是,当我单击注册按钮时,它会抛出 MethodNotAllowedHttpException。这是因为注册按钮和方法仅在auth/register 路由中有效,这就是为什么它在domain.com/register 中无效?
  • 如果您指的是完整注册表单中的注册按钮(它会询问用户名、密码等) - 即我在原始问题中描述的过程的最后一步,那么原因可能是 Form::open() 元素中没有指定任何操作,因此当您单击注册时,laravel 不知道该做什么。您必须在注册表单的 Form::open() 元素中告诉它要走什么路线或采取什么行动(使用什么控制器和方法)
  • 我不断阅读您对我的回复。再次非常感谢。现在,假设我点击了writer 按钮并定向到register。一切都成功加载(我的意思是,主注册表通常位于auth/register)。这是我通常用来注册用户Route::post('auth/register', 'Auth\AuthController@postRegister'); 的路线。我尝试添加另一条路线:Route::post('register', 'Auth\AuthController@postRegister');,但仍然遇到相同的错误。我错过了哪里?
  • 尝试在您的 routes.php 文件中反转 'register' 和 'auth/register',这样你就有了 Route::post('register', [ 'as' => 'writer_path', 'uses' => 'ProfessionController@displayForm' ]);和 Route::post('auth/register'), 'Auth\AuthController@postRegister');作为您的注册路线。我希望这会有所帮助。
【解决方案2】:

尝试将“方法”添加到 Form::open

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

并在控制器的“输入”上使用“\”

$input = \Input::get();

【讨论】:

  • 同样的问题发生了。 :/ 在这里,我用开发者工具中的一些照片进行了解释。 laravel.io/forum/…
  • 在$profession = $input['profession']; 之后添加关注的输出是什么? dd($profession);
  • 当我将dd($profession); 放在$profession = $input['profession']; 之后,我没有得到任何输出。仍然没有任何反应
  • 我已经在一个新的 laravel 项目中尝试了你的代码。它工作正常。我使用 WelcomeController 和 welcome.blade 代替你的文件名。 https://drive.google.com/file/d/0B9ajHAkB-0-mT2pGT24wRUJRbVE/view?usp=sharing
  • 为什么它没有在我的项目中发生 :(?你改变了什么吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-23
  • 1970-01-01
  • 2017-05-20
  • 1970-01-01
  • 2021-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多