我正在使用Laravel,在我的控制器中我有一个函数返回一个构建的字符串:
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);
}
创建表单的刀片语法未被评估,因为它被视为字符串文字。有什么方法可以解决这个问题,并解释刀片语法{{ }}
吗?
答案 0 :(得分:0)
我想,您正在寻找\Blade::compileString()
。此函数获取刀片字符串并返回已编译的php代码。
所以你必须使用eval
来解释php代码。
function compile($string, $args) {
$code = \Blade::compileString($string);
ob_start();
extract($args);
eval('?>' . $code);
return ob_end_clean();
}
答案 1 :(得分:0)
您可以将html / blade放在模板中,以便使用render()
Facade / class的View
函数,例如:
$string = view('your_template_file')->render();
render()
将编译后的模板作为字符串返回,因此您可以尝试执行以下操作:
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);
}