在 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 中搜索视图的主要内容,如果未能解决你的问题,请参考以下文章