Laravel:如何命名捆绑包中的帮助程序库?

时间:2013-02-16 21:17:36

标签: namespaces bundle laravel

我通过构建我的第一个包来学习,并且对名称空间/别名感到很困惑..

我正在尝试创建一个宏(不确定这实际上是一个宏,只是看起来像一个?),我可以在我的视图中调用它,如下所示:

{{ CMS::text('1','Title') }}

{{ \CMS::text('1','Title') }}

但是我收到了错误:

Class 'Lax\CMS' not found

包含应生成输出的代码的文件位于 /Lax/libraries/cms.php 中并启动: namespace Lax\libraries;

我的捆绑 Lax / start.php 有:

Autoloader::map(array(
   'Lax_Base_Controller' => Bundle::path('lax').'controllers/cms.php',
   'CMS' => Bundle::path('lax').'libraries/cms.php',
));

Autoloader::namespaces(array(
    'Lax\Models' => Bundle::path('lax').'models',
));

/ application / config / application / 中的别名数组我添加了

'CMS' => 'Lax\\CMS', 

bundles.php:

'lax' => array(
        'auto'      => true,
        'handles'   => 'lax'
    ),

我做错了什么!?

任何建议都感激不尽! Tx,Tim

1 个答案:

答案 0 :(得分:1)

您正在自动加载Lax \ Models命名空间,并尝试从未自动加载的Lax \ Libraries命名空间访问内容。 您应该考虑“仅限”自动加载Lax命名空间,这将允许您从将来可能添加的任何文件夹中加载内容。

在代码中,这就是你需要做的全部,改变:

Autoloader::namespaces(array(
    'Lax\Models' => Bundle::path('lax').'models',
));

对此:

Autoloader::namespaces(array(
    'Lax' => Bundle::path('lax'),
));

现在,在您看来,您可以像这样访问CMS类(在Lax \ Libraries命名空间中):

{{ Lax\Libraries\CMS::some_wicked_cool_method(1, 'title') }}

如果您想摆脱Lax \ Libraries部分,可以在视图顶部的某处添加“use”语句,如下所示:

<?php use Lax\Libraries\CMS; ?>

然后在视图中的其他地方,像这样使用它:

{{ CMS::some_wicked_cool_method(1, 'title') }}

更好的方法是在控制器中“准备”这些变量,并将它们作为简单变量发送到您的视图。

它可能在您的控制器中看起来像这样

<?php

use Lax\Libraries\CMS;

class Some_Controller {

    public function get_index()
    {
        $title = CMS::some_wicked_cool_method(1, 'title');

        return View::make('someview', compact('title'))
    }
}

现在,您的观点又回到了使用它:

{{ $title }}
很好,不是吗?