【问题标题】:Laravel: How to namespace a helper library within a bundle?Laravel:如何在包中命名帮助程序库?
【发布时间】:2013-02-01 15:19:54
【问题描述】:

我通过构建我的第一个包来学习,但对命名空间/别名感到非常困惑..

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

{{ 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,蒂姆

【问题讨论】:

    标签: namespaces bundle laravel


    【解决方案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 }}
    

    甜蜜,不是吗?

    【讨论】:

    • 啊!很简单!这就是我得到的深夜教程复制粘贴 - 感谢您的详细回答:)
    猜你喜欢
    • 2011-05-16
    • 1970-01-01
    • 2012-01-31
    • 2011-01-27
    • 1970-01-01
    • 2022-12-18
    • 2021-09-16
    • 1970-01-01
    • 2018-11-06
    相关资源
    最近更新 更多