在 php 字符串中返回 Laravel blade 语法
Returning Laravel blade syntax in php string
我正在使用 Laravel,在我的控制器中我有一个函数 returns 一个构建的字符串:
public function getAddEditRemoveColumnData()
{
$projects = Project::select(['id', 'name', 'cost', 'created_at']);
return Datatables::of($projects)
->addColumn('action', function ($project) {
return '<div class="btn-group">
<span class="caret"></span>
<span class="sr-only">Toggle Dropdown</span>
</button>
<ul class="dropdown-menu">
<li><a href="/projects/' . $project->id . '/edit">Edit</a></li>
<li>
<a>{!! Form::open(array("url" => "projects/" . $project->id, "class" => "", "id" => "delete-form")) !!}
{!! Form::hidden("_method", "DELETE") !!}
<button type="submit" class="btn-link delete-action" style="color:inherit; text-decoration: none;">Delete</button>
{!! Form::close() !!}
</a>
</li>
</ul>
</div>';
})
->make(true);
}
创建表单的 blade 语法未被评估,因为它被视为字符串文字。有什么办法可以解决这个问题并解释 blade 语法 {{ }}
?
我想,您正在寻找 \Blade::compileString()
。此函数采用您的 blade 字符串和 returns 已编译的 php 代码。
所以你之后必须使用eval
来解释php代码。
function compile($string, $args) {
$code = \Blade::compileString($string);
ob_start();
extract($args);
eval('?>' . $code);
return ob_end_clean();
}
您可以将 html/blade 放入模板中,这样您就可以使用 View
Facade/class 的 render()
功能,例如:
$string = view('your_template_file')->render();
render()
returns 编译后的模板为字符串,所以你可以尝试这样做:
public function getAddEditRemoveColumnData()
{
$projects = Project::select(['id', 'name', 'cost', 'created_at']);
return Datatables::of($projects)
->addColumn('action', function ($project) {
return view('your_template_file', compact('project'))->render();
})
->make(true);
}
我正在使用 Laravel,在我的控制器中我有一个函数 returns 一个构建的字符串:
public function getAddEditRemoveColumnData()
{
$projects = Project::select(['id', 'name', 'cost', 'created_at']);
return Datatables::of($projects)
->addColumn('action', function ($project) {
return '<div class="btn-group">
<span class="caret"></span>
<span class="sr-only">Toggle Dropdown</span>
</button>
<ul class="dropdown-menu">
<li><a href="/projects/' . $project->id . '/edit">Edit</a></li>
<li>
<a>{!! Form::open(array("url" => "projects/" . $project->id, "class" => "", "id" => "delete-form")) !!}
{!! Form::hidden("_method", "DELETE") !!}
<button type="submit" class="btn-link delete-action" style="color:inherit; text-decoration: none;">Delete</button>
{!! Form::close() !!}
</a>
</li>
</ul>
</div>';
})
->make(true);
}
创建表单的 blade 语法未被评估,因为它被视为字符串文字。有什么办法可以解决这个问题并解释 blade 语法 {{ }}
?
我想,您正在寻找 \Blade::compileString()
。此函数采用您的 blade 字符串和 returns 已编译的 php 代码。
所以你之后必须使用eval
来解释php代码。
function compile($string, $args) {
$code = \Blade::compileString($string);
ob_start();
extract($args);
eval('?>' . $code);
return ob_end_clean();
}
您可以将 html/blade 放入模板中,这样您就可以使用 View
Facade/class 的 render()
功能,例如:
$string = view('your_template_file')->render();
render()
returns 编译后的模板为字符串,所以你可以尝试这样做:
public function getAddEditRemoveColumnData()
{
$projects = Project::select(['id', 'name', 'cost', 'created_at']);
return Datatables::of($projects)
->addColumn('action', function ($project) {
return view('your_template_file', compact('project'))->render();
})
->make(true);
}