在php字符串中返回Laravel刀片语法

时间:2017-04-11 21:11:59

标签: php laravel-5 blade laravel-blade

我正在使用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);
    }

创建表单的刀片语法未被评估,因为它被视为字符串文字。有什么方法可以解决这个问题,并解释刀片语法{{ }}吗?

2 个答案:

答案 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);
}