2017-04-11 87 views
1

我使用Laravel,在我的控制器我有一个返回建立字符串的函数:返回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

你可以把你的HTML /刀片在模板中,所以你可以使用render()功能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); 
} 
+0

这工作。干净的解决方案!谢谢 – user3574492

0

我认为,您正在寻找\Blade::compileString()。此功能需要您的刀片字符串并返回已编译的php代码。

因此,您必须事先使用eval来解释php代码。

function compile($string, $args) { 
    $code = \Blade::compileString($string); 
    ob_start(); 
    extract($args); 
    eval('?>' . $code); 
    return ob_end_clean(); 
}