Laravel 将数据从一个视图传递到另一个视图

Posted

技术标签:

【中文标题】Laravel 将数据从一个视图传递到另一个视图【英文标题】:Laravel Passing Data From One View to Another View 【发布时间】:2015-10-23 17:33:50 【问题描述】:

我正在考虑从主页制作一个登陆页面,它将引导客人进入注册页面。我想制作两个用于发送数据的表单和两个提交按钮,比如说阅读器和编写器,根据他们用来转到注册表单页面的按钮,我想从按钮中传递profession 字符串登陆页面,然后将其放入/auth/register的注册表中。

    !! Form::open(array('url' => '/auth/register', 'profession' => 'writer')) !!

    !! Form::submit('Writer', array('class' => 'btn btn-warning')) !!

    !! Form::close() !!


    !! Form::open(array('url' => '/auth/register', 'profession' => 'reader')) !!

    !! Form::submit('Reader', array('class' => 'btn btn-default')) !!

    !! Form::close() !!

它没有将我引导至页面app.com/auth/register。但是当我直接输入链接时它会起作用。

我的想法是在/auth/register/ 中使用$profession 并访问该值并将其用作注册表单中的隐藏字段。

(使用 laravel 5.1)


编辑:

查看源代码:

    <form method="POST" action="http://app.com/auth/register" accept-charset="UTF-8" profession="writer"><input name="_token" type="hidden" value="dZXQsNI1BGQ39JjDLFUEkSQzL5bTNwe8o3rpiSQL">

    <input class="btn btn-warning" type="submit" value="Writer">

    </form>


    <form method="POST" action="http://app.com/auth/register" accept-charset="UTF-8" profession="reader"><input name="_token" type="hidden" value="dZXQsNI1BGQ39JjDLFUEkSQzL5bTNwe8o3rpiSQL">

    <input class="btn btn-default" type="submit" value="Reader">

    </form>

编辑 2:

    !! Form::open(array('url' => '/auth/register', 'profession' => 'writer')) !!

    !! link_to('/auth/register', 'Writer', array('class' => 'btn btn-default')) !!

    !! Form::close() !!

我尝试了这个。至少,现在它正在引导页面,但我仍然无法访问profession的数据值


编辑 3:

路线:

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

Route::get('/', function()

    return view('pages.home');
);

https://app.com/auth/register 正在工作。

【问题讨论】:

如果你使用 url,它必须是完整的 url。或者,您可以使用 route 属性。参考:laravel-recipes.com/recipes/124/opening-a-new-html-form @zerodin 我添加了关于视图的编辑:来源.. 我认为这不是问题 请将您的路线发送给我们,我真的不认为问题在于将变量从一个视图发送到另一个视图。 @TonyRaoulIscaros 我将我的路线添加为编辑#3 我需要注册新路线吗? 【参考方案1】:

这是有关如何实施它的分步演练。我测试了它。所以它有效。这是针对“作家”的,但您可以按照您最初为其他职业的计划复制它。

我假设你已经注册了 Laravel Collective 包,因为你使用了花括号和感叹号。

第 1 步:

在您的登录页面视图中,您有编写器按钮,添加一个带有字符串“编写器”的隐藏字段。像这样:

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

并不是说在开放字段中我们使用的是命名路由('writer_path')。

第 2 步:

在你的 routes.php 文件中注册一个路由和一个控制器,像这样:

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

第 3 步:

在您的示例控制器中,您定义了 displayForm 方法。 在该方法中,您首先获取从着陆页视图传递的值。

如果你不知道如何创建控制器,你可以这样做

php artisan make:controller SampleController

从命令行

因为值是作为数组到达的,所以你必须从数组中获取字符串'writer',然后将它传递给新视图(带有 writer 注册表单的视图)。

<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Input;

class SampleController extends Controller

/**
 * Display a listing of the resource.
 *
 * @return Response
 */
public function displayForm()

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



最后一步:

在您将创建为 writerregistration.blade.php 的新视图中,您将显示带有刚刚传递的字段(“profession”)的表单,其中包含字符串“writer”。像这样:

!! Form::open() !!

!! Form::label('username', 'Username:') !!
!! Form::text('username', null, ['class' => 'form-control']) !!

!! Form::label('profession', 'Profession:') !!
!! Form::text('profession', $profession, ['class' => 'form-control']) !!

!! Form::label('email', 'Email:') !!
!! Form::text('email', null, ['class' => 'form-control']) !!

!! Form::label('passowrd', 'Password:') !!
!! Form::password('password', ['class' => 'form-control']) !!  

!! Form::label('password_confirmation', 'Password Confirmation:') !!
!! Form::password('password_confirmation', ['class' => 'form-control']) !!

!! Form::submit('Sign Up', ['class' => 'btn btn-primary']) !!

!! Form::close() !!

Presto,您已在登录页面中属于作者按钮的隐藏字段中填充了作者注册表中的字段。

【讨论】:

我该怎么做呢?你能编辑你的答案吗?我已经在 OP 中编写了关于 auth/register 的路线。我没有注册新的控制器或任何东西。我需要吗?我真的很困惑 我已经编辑了答案以包含完整的演示。干杯 要添加“读者”,您将在登录页面中添加一个不同的表单,其中包含另一个隐藏字段,这次将“读者”而不是作家作为职业(类似于您最初所做的(。 displayForm 方法会意识到你传递的是 reader 而不是 writer,这就是它在注册表单中显示的内容。 我做了你所做的一切,但我最终没有指向任何地方。当我单击按钮时,它什么也不做。当我在 Developer 中打开 Network 时,它会显示注册表,但它不会将我引导至页面。等待时间(绿色的)也很长。 我仍然无法让它工作。在这里,我放了我所有的代码和一些关于我的问题的屏幕截图。如果你能帮助我,我会很高兴。 laravel.io/forum/…

以上是关于Laravel 将数据从一个视图传递到另一个视图的主要内容,如果未能解决你的问题,请参考以下文章

将数据从视图控制器传递到另一个视图控制器

如何将数据从表视图传递到另一个视图控制器

将 ImageData 从一个视图控制器传递到另一个视图控制器

将数据从 viewcontroller tableview 传递到另一个视图控制器

将活动之间的数据从列表视图传递到另一个活动

尝试使用 segue 将数据从一个视图控制器传递到另一个视图控制器