namespaces - Laravel:如何在包中命名帮助库?

标签 namespaces bundle laravel

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

我正在尝试在我的包中创建一个宏(不确定这是否真的是一个宏,只是看起来像一个?)我可以从我的 View 中调用它,如下所示:
{{ CMS::text('1','Title') }}
或者
{{ \CMS::text('1','Title') }}
但我收到错误:
Class 'Lax\CMS' not found
包含应该产生输出的代码的文件在 中/Lax/libraries/cms.php 并开始:namespace Lax\libraries;
我的 bundle 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,蒂姆

最佳答案

您正在自动加载 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 部分,您可以在 View 顶部的某处添加一个“use”语句,如下所示:
<?php use Lax\Libraries\CMS; ?>

然后在 View 中的其他地方,像这样使用它:
{{ CMS::some_wicked_cool_method(1, 'title') }}

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

它在您的 Controller 中可能看起来像这样
<?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 }}

甜蜜,不是吗?

关于namespaces - Laravel:如何在包中命名帮助库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14915213/

相关文章:

java - 带有 Maven bundle 插件的 OSGi 未加载库

php - Laravel 内存异常 'Database/Connection.php:301'

php - Laravel:模型内验证。多重验证规则

javascript - 为什么他们在 javascript 中使用 namespace ?

tfs - 团队基础服务器 : References Issue

c++ - 错误 : ‘log2’ is not a member of ‘std’

c# - 访问另一个命名空间内的同名全局类

javascript - 将包中的代码拆分单独导出到不同的包

android - Bundle 和 Intent 有什么区别?

laravel - laravel 更新后如何删除旧图像?