【问题标题】:Last Laravel controller function loses data最后一个 Laravel 控制器功能丢失数据
【发布时间】: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的助手

标签: laravel model-view-controller request laravel-8


【解决方案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()
猜你喜欢
  • 1970-01-01
  • 2016-02-04
  • 2018-01-15
  • 1970-01-01
  • 2017-11-16
  • 2019-01-09
  • 2019-10-21
  • 2019-01-26
  • 2018-11-26
相关资源
最近更新 更多