如何重定向排除拉维尔路由中的一些sl。

发布于 2025-01-20 01:41:40 字数 1727 浏览 5 评论 0原文

我想排除 slug 路由中的 {user}

我想要:

example.com/user/someslugs

排除 slug 路由中的 {user} example.com/someslugs

// This my Verify Controller

class VerifyController extends Controller{
    public function redirect($user, $slug){
        // Get verify
        $verify = Verify::slug($slug)->first();

        // Check if verify exists
        if (!$verify) {
            abort(404);
        }
        

        // Redirect to url
        return redirect($verify->url);
    }
}

功能

// MyFunc

if (!function_exists('verify')) {
    function verify($uri, $user){
        $model = new \App\Models\Verify;

        if (!validate_url($uri)) {
            return false;
        }

        $createVerify = function($url) use ($model){
            $slug = \Str::random(6);
            $new = $model;
            $new->url = $url;
            $new->slug = $slug;
            $new->save();

            return $slug;
        };


        $route = function($slug, $user){
            return route('verify', ['user' => $user, 'slug' => $slug]);
        };

        if (!$verify = $model->url($uri)->first()) {
            $slug = $createVerify($uri);


            return $route($slug, $user);
        }


        return $route($verify->slug, $user);
    }
}

路由 web.php

// MyRouteVerify

Route::get('{user}/{slug}', 'VerifyController@redirect')->name('verify');

我从路由中删除 {user} 和错误控制器时的主要问题被称为。 我怎样才能实现这个目标?要获取完整的 URL,请排除 {user}(example.com/someslugs)?

有什么建议吗?我真的很感激一些好的和相关的答案。谢谢!

I would like to exclude the {user} in slug route

I want to make:

from example.com/user/someslugs

to exclude the {user} in slug route example.com/someslugs

// This my Verify Controller

class VerifyController extends Controller{
    public function redirect($user, $slug){
        // Get verify
        $verify = Verify::slug($slug)->first();

        // Check if verify exists
        if (!$verify) {
            abort(404);
        }
        

        // Redirect to url
        return redirect($verify->url);
    }
}

Function

// MyFunc

if (!function_exists('verify')) {
    function verify($uri, $user){
        $model = new \App\Models\Verify;

        if (!validate_url($uri)) {
            return false;
        }

        $createVerify = function($url) use ($model){
            $slug = \Str::random(6);
            $new = $model;
            $new->url = $url;
            $new->slug = $slug;
            $new->save();

            return $slug;
        };


        $route = function($slug, $user){
            return route('verify', ['user' => $user, 'slug' => $slug]);
        };

        if (!$verify = $model->url($uri)->first()) {
            $slug = $createVerify($uri);


            return $route($slug, $user);
        }


        return $route($verify->slug, $user);
    }
}

Route web.php

// MyRouteVerify

Route::get('{user}/{slug}', 'VerifyController@redirect')->name('verify');

The main problem when I remove {user} from route and wrong controller is called.
How can I achieve this? to get the full URL exclude the {user}, (example.com/someslugs)?

Any suggestion? And I would really appreciate some good and relative answer. Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

逆光飞翔i 2025-01-27 01:41:40

的末尾,

如果您保证slug永远不会匹配您的路线,则可以将用户路由放在Web.php文件示例

// route list here
Route::get('/someroute', 'SomeController@somemethod');
  
  
// the last route in your web.php file 
Route::get('/{slug}', 'VerifyController@redirect')->name('verify');

我希望它有用

in case you guarantee that your slug will never match your route, you can put your user route at the end of the web.php file

Example

// route list here
Route::get('/someroute', 'SomeController@somemethod');
  
  
// the last route in your web.php file 
Route::get('/{slug}', 'VerifyController@redirect')->name('verify');

I hope it's useful

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文