我是一个新的学习laravel 4.我想覆盖特定的帮助函数.或者向Url,Str等添加新功能.如何做到这一点?
Mat*_*röm 20
根据您想要扩展或替换的Laravel的哪个部分,有不同的方法.
向Str添加函数非常简单,因为"宏":
这是添加功能的简短示例:
Str::macro('test', function($str) {
return 'Testing: ' . $str . '!';
});
Run Code Online (Sandbox Code Playgroud)
然后,您可以按预期调用此函数:
echo Str::test('text'); // Outputs "Testing: text!"
Run Code Online (Sandbox Code Playgroud)
Str,Form,HTML和Response支持使用宏添加函数.
要扩展URL,必须使用Laravel的IOC.这在文档中解释(如BenjaminRH所述).我同意这有点难以理解.这是扩展URL的一步一步:
创建文件夹app/lib以保存扩展类.
将此文件夹添加到自动加载:
在app/start/global.php中,将lib路径附加到类加载器:
ClassLoader::addDirectories(array(
app_path().'/commands',
app_path().'/controllers',
app_path().'/models',
app_path().'/database/seeds',
app_path().'/lib'
));
Run Code Online (Sandbox Code Playgroud)
然后添加composer.json classmap 的路径:
"autoload": {
"classmap": [
"app/commands",
"app/controllers",
"app/models",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php",
"app/lib"
]
},
Run Code Online (Sandbox Code Playgroud)创建自定义UrlGenerator app/lib/CustomUrlGenerator.php:
<?php
use \Illuminate\Routing\UrlGenerator;
class CustomUrlGenerator extends UrlGenerator
{
public function test()
{
return $this->to('/test');
}
}
Run Code Online (Sandbox Code Playgroud)创建服务提供者app/lib/CustomRoutingServiceProvider.php:
<?php
use \Illuminate\Routing\RoutingServiceProvider;
class CustomRoutingServiceProvider extends RoutingServiceProvider
{
public function boot()
{
App::bind('url', function()
{
return new CustomUrlGenerator(
App::make('router')->getRoutes(),
App::make('request')
);
});
parent::boot();
}
}
Run Code Online (Sandbox Code Playgroud)在app/config/app.php中注册服务提供商:
添加CustomRoutingServiceProvider到providers数组.例如,在Workbench提供程序之后:
'Illuminate\Workbench\WorkbenchServiceProvider',
'CustomRoutingServiceProvider',
Run Code Online (Sandbox Code Playgroud)composer dump-autoload从项目根文件夹运行.
完成.使用如下:
URL::test();
Run Code Online (Sandbox Code Playgroud)注意 代码已经过测试,但可能包含一些错误
| 归档时间: |
|
| 查看次数: |
3912 次 |
| 最近记录: |