首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在路由中使用url参数,以便在条件中使用

问在路由中使用url参数,以便在条件中使用
EN

Stack Overflow用户
提问于 2019-02-18 19:37:41
回答 4查看 558关注 0票数 0

我试图找到正确的方法,用laravel来解释这个问题,这样我就可以选择一个GET路径,它调用一个函数,但是在这个函数中,我想使用mysql表中的数据来确定要显示哪个刀片。

假设使用查询字符串参数访问此URL:

代码语言:javascript
复制
www.testsite.com?email=testEmail.com

我选择了这个路径(但不确定如何接受这个参数)

代码语言:javascript
复制
Route::get('register', 'Data\DataController@DataForm')
    ->name('Data.register');

我有一个名为dataTable的mysql表,设置如下

代码语言:javascript
复制
email            |  type
-------------------------
test1@mail.com      A
test2@mail.com      B
test3@mail.com      C

合并电子邮件参数的最佳方法是什么,这样我就可以点击单个路由和单个函数,然后使用mysql中的电子邮件/类型列来确定要显示的合适的刀片?

代码语言:javascript
复制
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');

    }
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-02-18 21:48:36

您可以将其添加为路由参数:

代码语言:javascript
复制
Route::get('register/{email}', 'Data\DataController@DataForm')->name('Data.register');

然后在控制器内部:

代码语言:javascript
复制
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);
    }
}
票数 2
EN

Stack Overflow用户

发布于 2019-02-18 19:46:33

使用路径中的斜杠,您应该能够像这样传递它:

代码语言:javascript
复制
Route::get('register/{email}', 'Data\DataController@DataForm')
    ->name('Data.register');

然后,在您的函数中,您只需使用变量$email,它就会在URL中包含电子邮件。但是不确定这个URL是否正常,在传递参数时使用斜杠而不是'?email=‘。

这里有更多的内容:

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

票数 1
EN

Stack Overflow用户

发布于 2019-02-18 20:00:24

显然,你需要更多的逻辑:

代码语言:javascript
复制
public function DataForm(Request $request)
{
    $type = (dataTable::where('email', $request->query->get('email'))->first())['type'];

    return view('data.type'.$type);

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54754218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档