【问题标题】:Search for Views in Laravel在 Laravel 中搜索视图
【发布时间】:2023-06-27 07:28:01
【问题描述】:

我正在一个网站上工作,在该网站上我需要的每个城市都有一张地图,例如“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

标签: php sql laravel views blade


【解决方案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'。它可能是相当多的页面。您为什么不尝试将页面存储在数据库中?您可以检索和显示。
      猜你喜欢
      相关资源
      最近更新 更多
      热门标签