将对象传递给Laravel Blade中的自定义控件结构

时间:2014-03-16 22:38:56

标签: laravel blade

我无法在传递给Laravel 4.1.23中的自定义控件结构的对象上调用成员函数。

我的自定义控制结构:

Blade::extend(function($view, $compiler){
    $pattern = $compiler->createMatcher('paginatePretty');
    $code = 
        '$1<?php
        echo $2->getCurrentPage();
        ?>';
    return preg_replace($pattern, $code, $view);
});

我的刀片视图代码实例化paginatePretty:

// $articles = Articles::orderBy('created_at', 'desc')->paginate($per_page);
@paginatePretty($articles)

在编译时,我收到此错误:

syntax error, unexpected '->' (T_OBJECT_OPERATOR), expecting ',' or ';'

自定义控件结构编译如下:

echo ($articles)->getCurrentPage();

如何将对象传递给自定义控件结构?

1 个答案:

答案 0 :(得分:0)

使用list()array来解决:

Blade::extend(function($view, $compiler){
    $pattern = $compiler->createMatcher('paginatePretty');
    $code = 
        '$1<?php
        #echo $2->getCurrentPage();  --> the bad code
        list($_paginator) = array$2;
        echo $_paginator->getCurrentPage();
    ?>';
    return preg_replace($pattern, $code, $view);
});

我在自定义控件结构中声明的变量前缀为下划线,以避免视图中的冲突。