我编写了一个简单的display_messages()
函数,它将搜索Session::get('errors')
闪存数据并将其回显到屏幕上。
我把这个功能放在哪里?在 Codeigniter 中,您有一个 helpers 文件夹,您可以在其中粘贴所有小的全局帮助方法。
正如乌斯曼建议的那样,
class Demo() {
在里面定义一个{{ Demo::display() }}
之所以有效,是因为库和模型在 start.php 第 76 行中自动加载。我相信文件名必须与类名匹配(注意大写)。
<?php
class Demo {
public static function display() {
if( !$message = Session::get('errors'))
$message = 'No Errors';
echo "<pre>print_r($message)</pre>";
}
}
不能完全弄清楚为什么我在使用类名 Common 时遇到问题,可能存在冲突(如果这很重要,您可以定义一个命名空间)...
helpers
在您的 app 文件夹中创建一个文件夹并创建一个文件application_helper.php
。使用这样的代码:
// app/helpers/application_helper.php
function display_messages()
{
exit('Yes');
}
然后在根目录中打开您的 composer.json 文件。app/helpers/application_helper.php
用 composer自动加载files
。
"autoload": {
....
"files": [
"app/helpers/application_helper.php"
]
完成,您现在可以调用display_messages()
.
某些自动加载器可能需要您composer dump
第一次运行命令。
谢谢 memeLab 提供了一个非常有用的答案,对我帮助很大。我只是想扩展他的答案,因为“ libraries
”文件夹不是自动加载目录,至少在我使用的 L4 的发布/当前版本中不是。此外,start.php 似乎已扩展为带有local.php 和 artisan.php的start
文件夹。global.php
因此,要将您自己的类用于单独的库或使用 L4 惰性自动加载器的帮助程序,您只需将要存储这些的任何文件夹包含到global.php
. 例如,我libraries
在目录列表中添加了一个文件夹。
ClassLoader::addDirectories(array(
app_path().'/commands',
app_path().'/controllers',
app_path().'/models',
app_path().'/database/seeds',
// this a custom path
app_path().'/libraries',
));
然后,您在该文件夹中定义的任何类都可以在您的控制器classname.php
中调用。CLASSNAME::methodName($someVar);
class CLASSNAME {
public static function methodName($someVar=NULL) {
// whatever you want to do...
return $message;
}
}
因此,以这种方式,您可以创建一个辅助类并定义在整个控制器中使用的不同方法。还要小心以这种方式在 Class 之外定义常规函数,因为它们不会工作(因为类并不总是被加载)。(例如someFunctionName($someVar);
,而不是CLASSNAME::methodName($someVar);
)如果您想以这种方式创建函数,您需要确保已加载,但是我不会详细说明这一点,因为最好将惰性加载器类用于此类事情,因此您只加载你真正需要的课程。
再次感谢 memeLab 和 Usman,如果没有他们的回答,我不会走这么远。:)
在文件中创建app/libraries/class/Message.php
并添加类
class Message {
public static function display() {
}
}
添加"app/libraries/class"
到composer.json
"autoload": {
"classmap": [
"app/commands",
"app/controllers",
"app/models",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php",
"app/libraries/class"
]
},
最后composer dump-autoload
在命令行中运行。
您可以通过Message::display()
在文件中创建app/libraries/function/display_messages.php
和添加函数
function display_messages() {
}
在 start/global.php 中添加一行
require app_path().'/libraries/function/display_messages.php';
您可以通过display_messages()
在 app/start/global.php 中添加这个
require app_path().'/config/autoload.php';
require app_path().'/start/loader.php';
App::instance('loader',new loader($autoload));
在 app/start 中创建一个新文件 loader.php 并添加:
class loader{
private $helpers = array();
public $autoload = array(
'helpers' => array()
);
function __construct($autoload = array()) {
if (!empty($autoload))
$this->autoload = $autoload;
foreach ($this->autoload as $key => $value)
{
$function = strtolower($key);
$this->$function($value);
}
}
function helpers($helpers=array())
{
if (!is_array($helpers))
$helpers = explode(",",$helpers);
foreach ($helpers as $key => $value) {
$this->helper($value);
}
}
function helper($helper = '',$path = '/')
{
$folder = app_path().'/helpers'.$path;
if (file_exists($folder.$helper.'.php') && !in_array($helper, $this->helpers)){
$this->helpers[] = $helper;
require $folder.$helper.'.php';
}
else{
$segments = explode('/',$helper);
if (is_dir($folder.$segments[0])){
array_shift($segments);
$this->helper($segments,$path.$segments[0].'/');
}
}
}
}
在 app/config 中创建一个新文件 autoload.php 并添加:
$autoload['helpers'] = array('functions'); // my autoload helpers!
在 app/ 中创建一个新文件夹 helpers,添加您的帮助文件。(例如 myhelper.php )
function myhelper()
{
echo 'helper';
}
在您的控制器中添加:
App::make('loader')->helper('myhelper');
myhelper();
在 L3 中,我通常会创建一个application/libraries/helpers.php
文件,并将require_once()
其放在我的application/start.php
. 类似于 L3 的laravel/helpers.php
文件。
我假设你可以在 L4 中做类似的事情。
编辑:只看来源,app/start/local.php
似乎它可能是这个地方。
我使用了本教程,我认为这是最简单的方法: http: //laravel-recipes.com/recipes/50/creating-a-helpers-file
然后将其加载到app\start\global.php的底部,如下所示。
// 在文件底部 require app_path().'/helpers.php';
或者更改您的composer.json文件并转储自动加载器。
{
"autoload": {
"files": [
"app/helpers.php"
]
}
}
$ 作曲家转储自动
然后你可以在 helpers.php 中编写你的函数并从任何地方调用它们
function myfunction($result){
return $result;
}
打开root_folder/vendor/laravel/framework/src/Illuminate/Support/helpers.php
你可以添加你的功能
if ( ! function_exists('display_messages'))
{
function display_messages()
{
return ...
}
}