Laravel 4中的外墙问题

Sorry for the English, but I am using the google translator. First of all I leave my code:

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 (the class)

<?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',

If instead of that Facade put this, if it works:

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

The problem I have is that when using the alias in the file app.php seeks Ftp class in the folder Facades/Ftp.php

Call to undefined method Jaimemse\Ftp\Facades\Ftp::hello()

Someone can help me? Thanks!

I fixed it by adding in register method:

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',

I have not added any app.php alias in the file. I deleted Facade file.

Now I can do things like:

Ftp::hello();

Hope that helps someone. Thank you!

You have to extend the BaseController:

<?php namespace Jaimemse\Ftp;

class Ftp extends \BaseController {

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

Also your route should be (with namespace):

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

Also

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

should be

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

You should put in app.php

'Jaimemse\Ftp\FtpServiceProvider', in 'providers' array (before 'aliases')

and in 'aliases' array

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