在laravel

时间:2017-12-01 15:26:32

标签: php laravel laravel-5.3

如何在laravel中为下面的第二个选项创建路线....

  1. http://localhost:8048/
  2. http://localhost:8048/content/645668/nice-up-civic-poll.html
  3. 第一次它会重定向到主页,这对我来说是正确的。

    第二我需要得到8048 /

    之后的内容

    所以基本上内容/ 645668 / nice-up-civic-poll.html 是一个参数,我需要单独处理它及其动态链接。

    在laravel中路由api:

    路由:: get(' /',' HomeController @ index');

    www.example.com将加载包含所有故事的主页。

    以下链接作为示例应该在www.example.com/之后得到值,基本上它是一个故事/文章链接,所以当它出现时将显示特定的故事。

    www.example.com/content/645668/nice-up-civic-poll.html

    www.example.com/content/283206/something-here.html

    www.example.com/content/234323/good-nice.html

    www.example.com/content/451425/breakup-actor.html

    www.example.com/content/365412/accident-occured.html

    所以基本上在使用apache服务器的域名之后获取所有内容。

    .htaccess文件

    <IfModule mod_rewrite.c>
        <IfModule mod_negotiation.c>
            Options -MultiViews -Indexes
        </IfModule>
    
        RewriteEngine On
    
        # Handle Authorization Header
        RewriteCond %{HTTP:Authorization} .
        RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    
        # Redirect Trailing Slashes If Not A Folder...
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_URI} (.+)/$
        RewriteRule ^ %1 [L,R=301]
    
        # Handle Front Controller...
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
    
        RewriteRule ^ index.php [L]
    </IfModule>
    

5 个答案:

答案 0 :(得分:1)

如果您想要一个归属路由,然后每个其他URI转到一个Controller方法,您可以制作一个包罗万象的路线:

Route::get('{catch}', 'SomeController@action')->where('catch', '.*');

这将捕获任何与之前定义的路径不匹配的URI。

如果你想要一切都去一个地方:

Route::get('{catch?}', ....)->where(...); // optional param

关于创建捕获所有路径的帖子,使用参数:

上的正则表达式条件进行回答

SO - How do I make a Catch-All Route in Laravel 5.2

<强>更新

如果您需要捕获的这些URI具有相同的格式,

www.example.com/content/645668/nice-up-civic-poll.html

您可以注册匹配该格式的路线,而不是捕捉所有可能的内容:

Route::get('content/{id}/{slug}', function ($id, $slug) {
    ...
});

答案 1 :(得分:0)

尝试使用$ request helper ..

        private async Task GetDirectoryFilesAsync(IProgress<int> taskProgress)
    {
        await Task.Run(() =>
        {
            try
            {
                var directoryPath = Directory.GetCurrentDirectory() + @"\..\..\..\FUG_2017\";
                var _listOfDirectoryFiles = Directory.GetFiles(directoryPath).Take(100);

                var fileCount = 0;
                foreach (var filePath in _listOfDirectoryFiles)
                {
                    _filesToProcessQueue.Enqueue(filePath);
                    fileCount++;

                    taskProgress?.Report(fileCount);
                }
            }
            catch (Exception exc)
            {
                FlushAndExit(exc);
            }
        });
    }

    private void GetDirectoryFiles(IProgress<int> taskProgress)
    {
        try
        {
            var directoryPath = Directory.GetCurrentDirectory() + @"\..\..\..\FUG_2017\";
            EventAggregator.Instance.Publish(new DisplayMainFormWaitBarWithMessage(ElementVisibility.Visible, $"Inspecting path {directoryPath}"));

            var _listOfDirectoryFiles = Directory.GetFiles(directoryPath).Take(1000);

            var fileCount = 0;
            foreach (var filePath in _listOfDirectoryFiles)
            {
                _filesToProcessQueue.Enqueue(filePath);
                fileCount++;

                EventAggregator.Instance.Publish(new DisplayMainFormWaitBarWithMessage(ElementVisibility.Visible, $"Loaded file {fileCount} of {_listOfDirectoryFiles.Count()} to Queue..."));
                taskProgress?.Report(fileCount);
            }

            EventAggregator.Instance.Publish(new DisplayMainFormWaitBarWithMessage(ElementVisibility.Visible, $"Loaded {_listOfDirectoryFiles.Count()} files to Queue..."));
        }
        catch (Exception exc)
        {
            FlushAndExit(exc);
        }
    }

或尝试这个..

$leftbehind = str_replace($request->getHost(),'', $request->fullUrl());

答案 2 :(得分:0)

使用$request->path()

  

path方法返回请求的路径信息。因此,如果传入请求的目标是http://example.com/foo/bar,则路径方法将返回foo/bar

https://laravel.com/docs/5.5/requests#request-path-and-method

答案 3 :(得分:0)

您可以使用Request::path()获取当前网址。

https://laravel.com/api/5.5/Illuminate/Http/Request.html - 选中Request的所有可用选项。
例如:如果您只想检查用户是否在某个网址中,请使用此功能 - Request::is('/url') // This will return true or false

答案 4 :(得分:-1)

您可以使用php的内置函数parse_url来检索内容/ 645668 / nice-up-civic-poll.html。

parse_url($url, PHP_URL_PATH)