【问题标题】:Passing String between views - Laravel 5.1在视图之间传递字符串 - Laravel 5.1
【发布时间】:2015-10-24 00:47:15
【问题描述】:

我想在主页上创建两个按钮buyerseller,点击这些按钮后,我希望客人获得带有~隐藏输入~的定向注册页面~放置在表单中,具体取决于按下按钮的值。

我正在使用 Laravel 5.1

对于我想要达到的目标,我需要注册一个新的路由和一个新的功能吗?

首先,我需要使用{!! link_to !!} 还是{!! Form submit !!}。我认为表单提交会起作用:

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

 {!! Form::submit('Seller', array('class' => 'btn btn-warning')) !!}

 {!! Form::close() !!}

我的路线是:

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

auth/register 和 AuthController 是 Laravel 默认自带的。我也没有注册新的公共功能。这是原因吗?我是否需要将数据从 view 发送到 controller,然后再发送到其他 view(view->controller->view)。我真的对这个感到困惑。

这就是它在 view-source 中的样子:

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

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

</form>

编辑:

我认为我无法在视图之间发送变量。那么我需要注册一个全新的路由和一个控制器,以及其中的两个方法吗?在这个阶段我真的很困惑。

【问题讨论】:

  • 我该怎么做?我愿意接受替代解决方案:)
  • 如何在表单提交按钮中插入Session::put('key', 'value')
  • 但是由于会有两个不同的按钮,这不是问题吗?我尝试做的只是获得价值,我认为方法并不重要。我正在尝试的关键是将其添加到链接中,例如.com/register?seller

标签: php html laravel


【解决方案1】:

你可以像这样注册一个新的路由:

Route::get('auth/{TYPE}/register', 'Auth\AuthController@getRegisterType')

你的主页应该是这样的:

    <a href="www.app.com/auth/seller/register">seller</a>

你的控制器方法应该是这样的:

public function getRegisterType($type)
{
  Session::put('registerType', $type);
  return redirect('/auth/register');
}

然后您可以从控制器方法getRegisterpostRegister 访问您设置的会话变量

【讨论】:

    【解决方案2】:

    查看我对您之前类似问题的回答,了解有关实施的详细信息:

    Laravel Passing Data From One View to Another View

    回答你提出的问题

    您可以使用两种形式,一种用于买方,一种用于卖方

    {!! Form::open(['route' => ['type_path']]) !!}
    {!! Form::hidden('type', 'buyer') !!}
    {!! Form::submit('Buyer', array('class' => 'btn btn-warning')) !!}
    {!! Form::close() !!
    
    {!! Form::open(['route' => ['type_path']]) !!}
    {!! Form::hidden('type', 'seller') !!}
    {!! Form::submit('Seller', array('class' => 'btn btn-warning')) !!}
    {!! Form::close() !!
    

    在您的着陆页上,然后将这两种形式直接指向同一个命名的路线(在本例中为“type_path”)

    然后在您的 routes.php 文件中,您将只引用一个控制器和一个方法并处理该方法中的逻辑。再次查看我的答案的链接,以查看作者和读者示例的完整实现。

    基本上如您所说,您将作为隐藏输入从视图发送到控制器再到第二个视图。

    【讨论】:

      【解决方案3】:

      有两个按钮直接指向带有查询字符串参数的注册页面:

      <a href="/auth/register?type=buyer">Buyer</a>
      <a href="/auth/register?type=seller">Seller</a>
      

      然后在 register.blade.php 视图中检查查询字符串参数:

      {!! Form::hidden('account_type', Request::query('type')) !!}
      

      如果您需要验证两者之一是否存在,那么您可以创建一个仅应用于登录路由的中间件类:

      public function handle($request, Closure $next)
      {
          if (! in_array($request->query('type'), ['buyer', 'seller'])) {
              // Error
          }
      
          return $next($request);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-25
        • 1970-01-01
        • 2014-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-08
        相关资源
        最近更新 更多