首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拉威尔路线:任何子弹都会接收所有请求。

拉威尔路线:任何子弹都会接收所有请求。
EN

Stack Overflow用户
提问于 2017-03-05 18:19:37
回答 1查看 995关注 0票数 0

我有这样的路线。$slug是一个变量,它与存储在数据库中的段塞相匹配,以便动态地将页面添加到网站。

代码语言:javascript
复制
#slug variable for different values of page slug....
Route::get('/{slug?}', array(
    'as' => 'page',
    'uses' => 'AbcController@renderPage'
));

然而,现在我希望添加一个网站的管理端,并希望以media-manager为前缀的路线。

我的问题是,每当我调用文件中的另一个路由时,上面提到的路由每次都会接受请求调用并调用renderPage 方法,而不管请求来自何处.

这是我的中间件,我检查请求是否来自像'media-manager/*'这样的URL,如果是的话,我不想检查网站的语言并将其重定向到媒体管理器的页面。

代码语言:javascript
复制
private $openRoute = ['media-manager/login', 'media-manager/postLogin', 'media-manager/media'];

public function handle($request, Closure $next)
    {

        foreach ($this->openRoute as $route) {
            if ($request->is($route)) {
                return $next($request);
            }
        }


        // Make sure current locale exists.
        $lang = $request->segment(1);
        if(!isValidLang($lang)) {
            $lang = getDefaultLang();
            $segments = $request->segments();            
            array_unshift($segments, $lang);

            $newUrl = implode('/', $segments);
            if (array_key_exists('QUERY_STRING', $_SERVER))
                $newUrl .= '?'.$_SERVER['QUERY_STRING'];

            return $this->redirector->to($newUrl);
        }
        setLang($lang);
        return $next($request);
    }

这是一个renderPage方法,每当请求被重定向时,不管是什么情况。

代码语言:javascript
复制
    public function renderPage($slug = '')
    {

        if ($slug == 'login') {
           return view ('site.login');
        }


        $page = Page::getBySlug($slug);
        if(empty($page)){
            return URL::to ('/');
        }

        if($slug == ''){//home page
            $testimonial = DB::table('testimonial')->where('lang','=',$this->lang)->get();
            $client_logo = DB::table('client_logo')->get();
            return View::make('index', compact('data','page', 'testimonial', 'client_logo'));

        }elseif($slug == 'services'){                
            return View::make('services', compact('page'));

        }elseif($slug == 'portfolio'){
            $categories = PortfolioCategory::getAll();
            $portfolio = Portfolio::getAll();
            return View::make('portfolio', compact('page', 'categories', 'portfolio'));

        }elseif($slug == 'oshara'){
            return View::make('oshara', compact('page'));

        }elseif($slug == 'blog'){
            $limit = 8;
            $pageNum = 1;

            $offset = ($pageNum-1)*$limit;
            $totalPosts = BlogPost::totalPosts();
            $totalPages  = ceil($totalPosts/$limit);
            $posts = BlogPost::getAll($offset, $limit);
            $blog_posts = View::make('partials.blog_posts', compact('posts','pageNum','totalPages'));
            return View::make('blog', compact('page', 'blog_posts', 'pageNum', 'totalPages'));

        }elseif($slug == 'contact'){
            $budgets = Budget::getAll();
            return View::make('contact', compact('page', 'budgets'));
        }
    }

这是控制器中的postLogin方法,在用户单击登录页面上的登录按钮后,我要调用该方法。

代码语言:javascript
复制
public function postLogin($request) {
        # code...
        //$request = $this->request;
        $this->validate($request, [
           'email1' => 'required|email',
            'password' => 'required|string'
        ]);
        if($user = User::whereEmail($request->email1)->first() ) {
            if(Hash::check($request['password'], $user->getAttributes()['password'])) {

                if(!$user->getAttributes()['is_active']) {
                    return redirect('/media-manager/login')->withErrors('Your Account is not Activated Yet!');
                } else if($user->getAttributes()['is_deleted']) {
                    return redirect('/media-manager/login')->withErrors('Your Account is Banned!');
                } else {
                    # Success
                    $cookie = Cookie::make('user_id', $user->getAttributes()['id'], 864000);
                    //echo "hello";
                    return view('site.media')->with('message', 'You have Successfully Logged In!')->withCookie($cookie);
                }
            } else {
                return redirect('/media-manager/login')->withErrors('Your Login Information is Wrong!');
            }
        } else {
            return redirect('/media-manager/login')->withErrors('Your Login Information is Wrong!');
        }
    }

请给我一些建议,这样我就可以在每次调用中禁用renderPage方法,并让我的正常路由完美地执行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-05 18:29:58

在Laravel采用了第一种匹配路线。所以我猜你在其他人(至少是媒体经理)之上定义了你的鼻涕虫路线,对吗?

因此,一个简单的解决方案就是将段塞路由定义放在路由文件的末尾。

另一种办法是利用该路线的条件。有关更多信息,您可以阅读或留下评论!

希望这能帮上忙!

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

https://stackoverflow.com/questions/42612152

复制
相关文章

相似问题

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