Laravel 4中的外墙问题

时间:2014-02-26 01:26:06

标签: php laravel package

对不起英语,但我正在使用谷歌翻译。 首先,我留下我的代码:

FtpServiceProdiver.php

<?php namespace Jaimemse\Ftp;

use Illuminate\Support\ServiceProvider;

class FtpServiceProvider extends ServiceProvider {

protected $defer = false;

public function boot()
{
    $this->package('jaimemse/ftp');
}

public function register()
{
    $this->app->bind('ftp', function()
    {
        return new Ftp;
    });
}

public function provides()
{
    return array();
}
}

Ftp.php(班级)

<?php namespace Jaimemse\Ftp;

class Ftp {

public function hello()
{
    return 'hola';
}
}

Facades / Ftp.php(Facade)

<?php namespace Jaimemse\Ftp\Facades;

use Illuminate\Support\Facades\Facade;

class Ftp extends Facade {

    protected static function getFacadeAccessor() { return 'ftp'; }

}

app.php

'Jaimemse\Ftp\FtpServiceProvider',
'Ftp' => 'Jaimemse\Ftp\Facades\Ftp',

如果不是那个Facade那么,如果它起作用:

'Ftp' => 'Jaimemse\Ftp\Ftp',

我遇到的问题是,在app.php文件中使用别名时,在Facades / Ftp.php文件夹中寻找Ftp类

调用未定义的方法Jaimemse \ Ftp \ Facades \ Ftp :: hello()

有人可以帮帮我吗?谢谢!

3 个答案:

答案 0 :(得分:0)

你必须扩展BaseController:

<?php namespace Jaimemse\Ftp;

class Ftp extends \BaseController {

    public function hello()
    {
        return 'hola';
    }
}

您的路线也应该是(namespace):

Route::get('/ftp', 'Jaimemse\Ftp\Ftp@hello');

另外

use Illuminate\Support\Facades\Facade;
use Illuminate\Support\ServiceProvider;

应该是

use \Illuminate\Support\Facades\Facade;
use \Illuminate\Support\ServiceProvider;

答案 1 :(得分:0)

你应该放入app.php

''提供者'数组中的'Jaimemse \ Ftp \ FtpServiceProvider'('别名'之前)

和'aliases'数组

'Ftp'=&gt; 'Jaimemse \的Ftp \外墙\的Ftp',

答案 2 :(得分:0)

我通过添加注册方法修复它:

FtpServiceProvider.php

public function register()
{
    $this->app->bind('ftp', function()
    {
         return new Ftp;
    });

    $this->app->booting(function() 
    { 
        $loader = \Illuminate\Foundation\AliasLoader::getInstance(); 
        $loader->alias('Ftp', 'Jaimemse\Ftp\Ftp'); 
    }); 
}

Ftp.php

class Ftp {

    public function hello()
    {
        return 'hello';
    }

}

App.php

'Jaimemse\Ftp\FtpServiceProvider',

我没有在文件中添加任何app.php别名。我删除了Facade文件。

现在我可以做以下事情:

Ftp::hello();

希望有人帮助。谢谢!