最后一个 Laravel 控制器功能丢失数据

Posted

技术标签:

【中文标题】最后一个 Laravel 控制器功能丢失数据【英文标题】:Last Laravel controller function loses data 【发布时间】:2021-01-04 19:28:38 【问题描述】:

我正在将参数从一个发送到另一个,而不通过路由传递它们以另一种方式确保安全,但最后一个函数的问题是它丢失了参数,甚至dd() 也不起作用,它返回视图只有一个未定义的变量$data

控制器

// Pass id to test.auth
public function show_auth($id)

    return view('test.auth', compact('id'));


// Here it gets id and dd($data) works
public function post_auth(Request $request)

    $id = $request->id;

    $data = DB::table('kuponai')->where('id', $id)->get();
    //dd($data);
    
    return view('test.view', compact('data'));


// Function from before dump doesn't work and returns view
public function view($data)

    dump($data);

    return view('test.view');

为此更改也不起作用...

public function check(Request $request)
    
      $id = $request->id;

      //
      
      return view('test.auth',compact('id'));
      
    
    public function show_auth($id)
    
        return view('test.auth',compact('id'));
        
    
    public function post_auth(Request $request)
    
      $id = $request->id;
      $pin = $request->pin;
      $mail = $request->elpastas;

      $data = DB::table('kuponai')
      ->where('id', $id)
      ->get();
      //dd($data);

      return route('view.show',compact('data'));
    
    public function view($data)
    
      $d = $this->post_auth($data);
      //dd($data);
        return view('test.view');
    

【问题讨论】:

如果你在同一个控制器中访问一个方法,使用$this->view($data);view()是调用blade的助手 【参考方案1】:

这可能是因为您传递的数据变量直接发送到test.view 视图。所以永远不要传递你所做的视图函数($ 数据)dump($data)

($数据不是通过路由发送,而是直接发送到视图中)!!

我似乎知道解决方案,但请告诉我您的 routes.php 的 sn-p

路线:

Route::group(['domain' => 'coupons.domain.com'], function()


        Route::get('/', 'App\Http\Controllers\IsoreController@index')->name('view.klientas');
        Route::post('/check', 'App\Http\Controllers\IsoreController@check')->name('check')->middleware('checkid');
        // view authenticated coupon
        Route::get('/view', 'App\Http\Controllers\IsoreController@view')->name('view.show')->middleware('checkpin');
        // show coupon authenticate form
        Route::get('/auth','App\Http\Controllers\IsoreController@show_auth')->name('show.auth')->middleware('checkid');
        // handle user input, authenticate coupon
        Route::post('/authenticate','App\Http\Controllers\IsoreController@post_auth')->name('post.auth')->middleware('checkpin');
);

尝试替换return view('test.auth', compact('data'));

有: return redirect('/view')->with(compact('data'));

我的中间件:

检查ID:

class KuponoId 

  public function handle($request, Closure $next)
  
        $exists =Kuponas::where('id', $request->id)->exists();
        if (!$exists) 
            return \Redirect::to(url('/'))->with('pin','Duomenys neteisingi, patikrinkite ');
        
        return $next($request);
  

检查针:

class CheckPin 

  public function handle($request, Closure $next)
  
        $exists = Kuponas::where('patvirtinimo_kodas', $request->pin)->where('elpastas', $request->elpastas)->where('id', $request->id)->exists();
        //dd($exists);
        if (!$exists) 
          //return \Redirect::to(url('/'))->with('pin','Duomenys neteisingi, patikrinkite ');
          return \Redirect::to(url('/'))->with('pin','Duomenys neteisingi! ');
        
        return $next($request);
  

当用户正确验证时,我只需要显示一次信息视图

好的,这个怎么样?

return redirect()->action('TheController@view', ['id' => 1]);

【讨论】:

我的路线没有参数这是敏感信息我可以把sn-p放在哪里? 我只想知道通向视图函数($data)的路由的形式。无论是“/view”还是“view/id” 解决方法是用return redirect ('/view')->compact($data);替换return view ('test.view', compact('data')); 目标是通过视图函数($data)路由$data变量,而不是直接在视图上显示$data变量(test.view) 调用未定义的方法 Illuminate\Http\RedirectResponse::compact()

以上是关于最后一个 Laravel 控制器功能丢失数据的主要内容,如果未能解决你的问题,请参考以下文章

重定向页面时 Laravel Auth 会话丢失

Laravel 5.8 文件上传使用 PUT 方法和 ajax

laravel5.5源码阅读草稿——入口

如何在控制器的 laravel 存储功能中进行保存和打印?

使用laravel搭建博客网站-博客的注册功能

使用laravel搭建博客网站-博客的注册功能