在 Laravel 中搜索视图

Posted

技术标签:

【中文标题】在 Laravel 中搜索视图【英文标题】:Search for Views in Laravel 【发布时间】:2016-08-12 09:53:24 【问题描述】:

我正在一个网站上工作,在该网站上我需要的每个城市都有一张地图,例如“London.blade.php”、“Paris.blade.php”。 我试图在网站上实现一个搜索栏,我需要它返回视图(blade.php 页面)作为结果,而不是视图的内容。 例如where('views', 'LIKE', "%$search_query%")。这实际上是否可能,因为视图没有存储在数据库中,如果是这样,有人知道该怎么做吗?

【问题讨论】:

您可以编写一个递归函数来读取 /resources/views 和子文件夹中存在的所有 foo.blade.php 文件名,并将它们推送到一个数组中。 嗨,我对 PHP 不太熟悉,所以我有点迷茫,'foo.blade.php'?...网上有什么例子可以指点我吗? @IarsAnders 看看如何在 laravel 中返​​回所有视图 - laravel-tricks.com/tricks/show-all-available-views 【参考方案1】:

这是一个通用函数,用于列出具有您指定的扩展名的任何文件,在本例中为 .blade.php。它从$path 开始搜索,然后递归搜索它找到的任何子目录。

function findFileExtension_r($extension, $path, &$names = array())
    $files = array_diff(scandir($path), array('..', '.'));
    foreach($files as $f)

        $abs_path = $path.'/'.$f;

        if(is_dir($abs_path)) //directory, recurse

            findFileExtension_r($extension, $abs_path, $names);

         else   //file, test if the name ends with $extension
            $ext_length = strlen($extension);
            if(substr($f, -$ext_length) === $extension)
                $names[] = $f;
            
        
    

用法:

//set up some values
$find = '.blade.php';
$path = 'path/to/laravel/resources/views';
//$blade_templates = array(); //can be initialized, or named in the function call below.

//call function
findFileExtension_r($find, $path, $blade_templates);

//output
echo '<h2>Results</h2><pre>' . print_r($blade_templates, true) . '</pre>';

【讨论】:

【参考方案2】:

您实际上可以将刀片模板存储在数据库中并通过 SQL 查询它们:https://github.com/delatbabel/viewpages

【讨论】:

【参考方案3】:

如果视图未存储在数据库中,则必须指向路由中的视图,并且可以使用动态路由。

Route::get('/slug', array('as' => 'page.show', 'uses' => 'PageController@show'));

表演功能:

public function show()

    $slug = input::get('location');
    $page = page::whereSlug($slug)->get();
    return View::make('pages')->with('page', $page);

【讨论】:

嗨,我似乎做错了什么,因为它抛出了一个错误,“缺少 [Route: page.show] [URI: countries/canada] 所需的参数。(查看:/用户/ccg/testsite/resources/views/layouts/app.blade.php)"....这就是我的路线 "Route::get('countries/canada', array('as' = > 'page.show', 'uses' => 'PageController@show'));"对于搜索框,我有
等一下。为什么是“加拿大”?该文件夹包含什么?
我有一个名为“国家”的主视图文件夹,在其中我有我需要的每个国家的子文件夹,例如加拿大,在加拿大文件夹中,我有一个 index.blade.php 文件以及其他城市....当我使用 "Route::get('/slug'"....缺少 [Route: page.show] [URI: slug] 所需的参数时,它会引发相同的错误...我也尝试将其更改为 Route::get('/slug', array('as' => 'page.show', 'uses' => 'PageController@show')); 但它会引发错误“找不到类‘App\Http\Controllers\page’” 你不能使用'/slug'。它可能是相当多的页面。您为什么不尝试将页面存储在数据库中?您可以检索和显示。

以上是关于在 Laravel 中搜索视图的主要内容,如果未能解决你的问题,请参考以下文章

更改返回视图以在 laravel 搜索功能上返回路线

使用 laravel Blade 嵌套视图

如何在laravel中搜索产品页面添加分页

在 laravel 中使用 ajax 从控制器刀片文件中传递搜索数据时遇到问题

如何响应ajax搜索输出查看~laravel

Laravel 5.3 中的搜索栏来过滤表格