【问题标题】:Laravel - How to pass variable from middleware to controllerLaravel - 如何将变量从中间件传递到控制器
【发布时间】:2017-06-14 03:17:43
【问题描述】:

我正在尝试将令牌从中间件传递给视图和控制器。但是我尝试过的所有步骤:

  1. Laravel - Passing variables from Middleware to controller/route
  2. Pass variable from middleware to templates
  3. Pass variable from middleware to view via controller in Laravel 5.2

帮助不大。这是我的设置:

请求的形式为:

https://website.com/reviews?linker=129b08e19014420049da7d6d7aa8fc35fc6279c4

然后被中间件解析和检查:

中间件

class CheckReviewLink
{
    /**
     * Check Review Link - granting clients access to submit review
     * =================
     * Check that user's link matches the 40 character string generated for user
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $response = $next($request);

        $url = $_SERVER['REQUEST_URI'];
        $parts = parse_url($url);
        $data['token'] = parse_str($parts['query'], $query);

        $testimonies = Testimony::all();

        foreach ($testimonies as $testimony) {
            if ($query['linker'] == $testimony->token)  {
              Session::flash('token', $data);
              return $next($request);

            }
        }


    }
}

** 查看 **

<div class="col-lg-6">
   <article>
       <input disabled type="text" placeholder="{{Session::get('token', $data)}}" id="token" name="token" size="100" class="form-control border-form white font4light">
   </article>
 </div>

当我在视图/控制器中获取会话数据时,出现错误:

Undefined variable: data

有什么想法吗?

【问题讨论】:

标签: php laravel


【解决方案1】:

当您尝试从会话中获取数据时,您不需要使用变量。所以,改为这样做:

{{ Session::get('token') }}

或者简单地说:

{{ session('token') }}

另外,代替flash() 方法这样做:

session(['token' => $data]);

然后根据需要手动删除:

session()->forget('token');

【讨论】:

    【解决方案2】:

    会话闪存存储用于在应用程序的执行时间之间保留数据,即从一个页面加载传递到另一个页面。在您的情况下,您只想在一次运行期间将数据从应用程序的一个部分传递到另一部分,因此内存中的 vars 会更干净、更快。

    这个人已经回答了:Laravel Middleware return variable to controller

    您现在可以更好、更清晰地控制代码,并且可以根据需要将数据传递给视图,而不必担心清除旧会话数据。

    【讨论】:

      【解决方案3】:

      首先,您的handle 方法中不需要第一行。你没有使用$response 变量。

      第二次使用$request-&gt;url() 而不是$_SERVER['REQUEST_URI']

      而你的答案是简单地使用session('token') 来获取你想要的令牌。

      【讨论】:

        【解决方案4】:

        如果要检索会话数据,只需调用session() 辅助方法,并为其提供所需数据的键:

        $myToken = session('token');
        

        但是,在您的情况下,您正在将关联数组存储到会话中,因此当您调用它时,您必须这样做:

        $myToken = session('token')['token'];
        

        所以在你看来,你最终会得到:

        <div class="col-lg-6">
           <article>
               <input disabled type="text" placeholder="{{ session('token')['token'] }}" id="token" name="token" size="100" class="form-control border-form white font4light">
           </article>
         </div>
        

        【讨论】:

          猜你喜欢
          • 2015-11-20
          • 2021-10-12
          • 2021-09-20
          • 1970-01-01
          • 2014-12-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多