在laravel刀片系统中,当我们想要包含部分刀片文件时,我们必须每次为每个文件写入完整路径。当我们重命名文件夹时,我们必须检查其中的每个@include文件。有时用相对路径包含它会非常容易。有没有办法做到这一点?
例如,我们在此路径中有一个刀片文件:
resources/views/desktop/modules/home/home.blade.php
我需要包含一个靠近该文件的刀片文件:
@include('desktop.modules.home.slide')
相对路径会是这样的:
@include('.slide')
有没有办法做到这一点?
答案 0 :(得分:2)
您需要为此创建自定义的Blade指令,原生include
指令不能那样工作。
阅读此页以了解如何创建自定义刀片指令:
https://scotch.io/tutorials/all-about-writing-custom-blade-directives
\Blade::directive('include2', function ($path_relative) {
$view_file_root = ''; // you need to find this path with help of php functions, try some of them.
$full_path = $view_file_root . path_relative;
return view::make($full_path)->render();
});
然后在刀片文件中,您可以使用相对路径包括视图文件:
@include2('.slide')
我试图告诉你这个主意。尝试测试一下自己。
答案 1 :(得分:2)
如果仍然有人对当前视图文件的相对路径感兴趣,请将此代码放入AppServiceProvider.php或您希望的任何提供程序的引导方法中
Blade::directive('relativeInclude', function ($args) {
$args = Blade::stripParentheses($args);
$viewBasePath = Blade::getPath();
foreach ($this->app['config']['view.paths'] as $path) {
if (substr($viewBasePath,0,strlen($path)) === $path) {
$viewBasePath = substr($viewBasePath,strlen($path));
break;
}
}
$viewBasePath = dirname(trim($viewBasePath,'\/'));
$args = substr_replace($args, $viewBasePath.'.', 1, 0);
return "<?php echo \$__env->make({$args}, \Illuminate\Support\Arr::except(get_defined_vars(), ['__data', '__path']))->render(); ?>";
});
然后使用
@relativeInclude('partials.content', $data)
包含来自名为partials的兄弟目录中的content.blade.php
祝大家好运
答案 2 :(得分:2)
一个时尚的选项,如果您想在子文件夹中组织视图文件:
public function ...(Request $request) {
$blade_path = "folder.subfolder.subsubfolder.";
$data = (object)array(
".." => "..",
".." => $..,
"blade_path" => $blade_path,
);
return view($data->blade_path . 'view_file_name', compact('data'));
}
然后在视图刀片中(或您要包括的其他位置):
@include($blade_path . 'another_view_file_name')
答案 3 :(得分:1)
现在有一个同时使用相对和绝对包含(lfukumori/laravel-blade-include-relative
)的程序包,它们与@include
,@includeIf
,@includeWhen
,@each
和{{1} }指令。我只是将其拉到一个项目中,效果很好。
答案 4 :(得分:0)
据我所知,这还没有在Laravel中实现。
我在快速搜索后找到了答案 5 :(得分:0)
您可以在
中执行此操作controller
。
use \resources\views\desktop\modules\home;
并在views
@include('home');