在条件中使用路由中使用url参数

时间:2019-02-18 19:37:42

标签: php laravel

我试图找到在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');

    }
}

4 个答案:

答案 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 =”传递参数。

此处有更多信息:

https://laravel.com/docs/5.7/routing#required-parameters

答案 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
}