在使用laravel框架,我怎么能叫在base_controller定义的函数,在视图中。 对于exacmple:
class Base_Controller extends Controller {
public static function format_something()
{
return something;
}
}
我怎么能叫format_something()视图中的文件?
通常我得到的错误看起来是这样的:方法[link_to_action]是不是在视图类中定义。
可能是一个愚蠢的问题,但在此先感谢!
编辑
好的! 首先,正确的地点做这样的事情是在库中的文件夹中。 其次,问题是,你的类不能有下划线。
因此,在应用程序/库我发文件AppHelper.php带班
class AppHelper {
public static function format_something()
{
return something;
}
}
并且可以调用它,如:
$formated = AppHelper::format_something;
感谢您的帮助和良好的论坛找到Boofus McGoofus。
这个答案是为Laravel 3.书面Laravel 4后,使用Composer的自动加载Lajdák马立克氏回答是好。
像功能format_something()
不会在控制器的归属。 该控制器应该仅仅是关于从各种源收集数据,并将其传递到视图。 它的工作是大多只是路由。
我创建了一个在我所有的小helpery功能的应用程序文件夹名为“助手”文件夹中。 为了确保所有的控制器,视图和模型访问它们,我已经包括在我的下面start.php
文件:
foreach(glob(path('app').'helpers/*.php') as $filename) {
include $filename;
}
我怀疑有一个更好的方式来做到这一点,但到目前为止,它已经为我工作。
对我来说工作:
创建目录“助手”或任何和文件:
// app/helpers/AppHelper.php
class AppHelper {
public static function format_something()
{
return something;
}
}
添加路径composer.json
// composer.json
"autoload": {
"classmap": [
"app/helpers" // <-------- add this line
]
},
运行:(重新加载自动加载)
composer dump-autoload
现在,您可以拨打:
$formated = AppHelper::format_something();
您可以从激发自己Laravel框架本身 。
我将采取格式化你的例子并参考url
在Laravel框架帮手。
通过创建自己的启动helpers.php
文件:
<?php
if (! function_exists('format_that')) {
/**
* Generate something
*
* @param string $text
* @return string
*/
function format_that($text)
{
return app('formatter')->format_that($text);
}
}
并把它添加到您的composer.json
文件:
"autoload": {
"files": [
"app/helpers/helpers.php"
]
}
运行此命令重新自动加载php文件:
$ composer dumpautoload
创建您的服务提供商 app/Providers/FormatterServiceProvider.php
:
<?php
namespace Illuminate\Routing;
use Illuminate\Support\ServiceProvider;
use App\Helpers\FormatGenerator;
class FormatterServiceProvider extends ServiceProvider
{
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
$this->app['formatter'] = $this->app->share(function ($app) {
return new FormatGenerator($app['request']);
});
}
}
注册您的服务提供商。 Laravel框架调用register
方法,但你只需要将其添加到您的应用程序配置文件config/app.php
:
'providers' => [
/*
* Application Service Providers...
*/
App\Providers\AppServiceProvider::class,
// other providers...
App\Providers\FormatterServiceProvider::class,
]
最后,创建您的实际发电机类 app/Helpers/FormatGenerator.php
<?php
namespace App\Helpers;
use Illuminate\Http\Request;
class FormatGenerator
{
protected $request;
/**
* Create a new URL Generator instance.
*
* @param \Illuminate\Routing\RouteCollection $routes
* @param \Illuminate\Http\Request $request
* @return void
*/
public function __construct(Request $request)
{
$this->request = $request;
}
public function format_that($text){
if ($request->path() == "home"){
return mb_strtoupper($text);
}
else{
return $text;
}
}
}
您可以选择创建一个门面 app/Facade/Formatter.php
,要能够做到Formatter::format_that($text)
:
<?php
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
/**
* @see \App\Helpers\FormatGenerator
*/
class Formatter extends Facade
{
protected static function getFacadeAccessor() { return 'formatter'; }
}
你可以问自己:
- 为什么门面? 您可以通过简单地调用重用组件在其他地方
Formatter::format_that($text)
,而不是app('formatter')->format_that($text)
糖语法真的。 - 为什么服务提供商? 依赖注射。 如果您需要使用
Request
或想建立一个复杂的对象,服务提供者会照顾的,对于你,让你获得$app
对象。