最后一个 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 控制器功能丢失数据的主要内容,如果未能解决你的问题,请参考以下文章