我试图找到在laravel中进行布局的正确方法,以便可以打出一条调用单个函数的GET路由,但是在该函数中,我想使用mysql表中的数据来确定要使用哪个刀片显示。
说使用查询字符串参数访问此URL:
www.testsite.com?email=testEmail.com
我选择了这条路线(但不确定如何接受参数)
Route::get('register', 'Data\DataController@DataForm')
->name('Data.register');
我这样建立了一个名为dataTable
的mysql表
email | type
-------------------------
test1@mail.com A
test2@mail.com B
test3@mail.com C
合并电子邮件参数的最佳方法是什么,这样我就可以击中单个路由和单个功能,然后使用mysql中的电子邮件/类型列来确定要显示的适当刀片?
public function DataForm(Request $request)
{
//query table based on query string parameter 'email'
$email = dataTable::where('email', /*email parameter?*/)->first();
if($email['type']== A){
return view('data.typeA');
}elseif($email['type']== B){
return view('data.typeB');
}elseif($email['type']== C){
return view('data.typeC');
}
}
答案 0 :(得分:2)
您可以将其添加为路由参数:
Route::get('register/{email}', 'Data\DataController@DataForm')->name('Data.register');
然后在控制器内部:
public function DataForm($email)
{
// Abort to 404 if $email is not a valid email address
if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
abort(404);
}
$typeData = Model::where('email', $email)->first();
// Email not found in the database
if(!$typeData){
abort(404);
}
switch ($typeData->type) {
case 'A':
return view('data.typeA');
case 'B':
return view('data.typeB');
case 'C':
return view('data.typeAC');
default:
abort(404);
}
}
答案 1 :(得分:1)
在路线中使用斜线,您应该可以像这样通过它:
Route::get('register/{email}', 'Data\DataController@DataForm')
->name('Data.register');
然后在您的函数中,您可以仅使用变量$ email,它包含URL中的电子邮件。但是不确定此URL是否正确,请使用斜杠代替“?email =”传递参数。
此处有更多信息:
答案 2 :(得分:1)
显然,您需要更多的逻辑:
public function DataForm(Request $request)
{
$type = (dataTable::where('email', $request->query->get('email'))->first())['type'];
return view('data.type'.$type);
}
答案 3 :(得分:0)
正如其他人所说,您可以自动输入Request $ request;但是您不必。您可以保留没有传递参数的函数定义,而改用辅助函数:
if(request()->has('email')) {
$email = request()->input('email');
// Do stuff
} else {
// No email supplied
}