如何获取响应中包含的所有Laravel 5视图的列表

时间:2015-09-23 22:27:11

标签: php laravel

我想知道是否有一种方法可以列出响应中加载/包含/扩展的所有视图?

我知道laravel-debugbar,但我想在我的代码中进行单元测试。

只是为了澄清:我不想列出资源文件夹中的所有视图。我想获得当前响应/请求中使用的所有视图的列表。

谢谢!

2 个答案:

答案 0 :(得分:0)

我为自己做了类似的事情。这不完美。使用函数创建以下路由:

  Route::get('list-views', function(){
  $full_path = 'FULL-PATH-TO-YOUR-LARAVEL-VIEWS-FOLDER'; //LIKE /home/account/www/resources/views/

  if(!is_dir($full_path))
    return 'Views directory not found';

  $files = scandir($full_path);
  unset($files[0]);
  unset($files[1]);

  if(($key = array_search('emails', $files)) !== false) {
    unset($files[$key]);
  }

  foreach($files AS $file){
    $link = str_replace('.blade.php','',$file);
    echo '<a href="'.$link.'">'.$link.'</a>'.'<br>';
  }
});

此函数的作用是检查是否存在您在变量$ full_path中定义的视图路径,扫描该目录以查看视图文件。现在,list-views将列出所有可用的视图。

答案 1 :(得分:0)

laravel debugbar这样做,但在我的情况下,我无法找到一种方法在同一个网址中列出所有视图,所以如果有人知道我会如何深深地欣赏它。

// EventServiceProvider@boot()

use Illuminate\Foundation\Http\Events\RequestHandled;

app('events')->listen(RequestHandled::class, function ($event) {
    $request  = $event->request;
    $response = $event->response;

    $check = !$request->ajax() &&
        !$request->pjax() &&
        $request->isMethodCacheable() &&
        $response->isSuccessful();

    if ($check) {
        $view = $response->original;
        $path = ltrim(str_replace(base_path(), '', realpath($view->getPath())), '/');

        logger([$request->url(), $path]);
    }
});

可能是另一种方式,但这只会显示主视图“而不是嵌套或父级”

public function handle($request, Closure $next)
{
    $response = $next($request);

    $check = !$request->ajax() &&
        !$request->pjax() &&
        $request->isMethodCacheable() &&
        $response->isSuccessful();

    if ($check) {
        $view = $response->original;
        $path = ltrim(str_replace(base_path(), '', realpath($view->getPath())), '/');

        logger([$request->url(), $path]);
    }

    return $response;
}

您也可以从中间件获取视图,但这只会显示与b4相同的主视图

function draw(){
    var delay = 200;//Your delay in milliseconds
    setTimeout(function(){
        /*code */
        alert(pipeNorth.height);
        requestAnimationFrame(draw);
    },delay);
}