2013-02-16 58 views
0

我已经通过构建我的第一个包学习,并且对名称空间/别名感到困惑。Laravel:如何在一个bundle中命名空间助手库?

我试图创建一个宏(不确定它是否实际上是一个宏,看起来像一个?我一束里面我可以从我的观点,像这样打电话:

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

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

但我得到埃罗R:

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', 
)); 

/应用/ CON别名阵列图/应用/我添加

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

bundles.php:

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

我在做什么错!?

任何建议感激地收到! Tx,Tim

回答

1

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

在代码中,这是你必须做的,变化:

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

要:现在

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

,在您看来,您可以访问CMS类(在宽松的\图书馆命名空间)是这样的:

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

如果你想摆脱宽松\库的一部分,你可以添加一个“使用”的声明somewh ERE在您的视图的顶部是这样的:

<?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 }} 

甜,是不是?

+1

啊!很简单!这就是我得到的深夜教程复制粘贴 - 感谢详细的答案:) – ptim 2013-02-19 07:34:53