因此,在laravel 5.2的laravel文档中,它表明这是在laravel中实现外观的方式。
<?php
namespace App\Http\Controllers;
use Cache;
use App\Http\Controllers\Controller;
class UserController extends Controller
{
/**
* Show the profile for the given user.
*
* @param int $id
* @return Response
*/
public function showProfile($id)
{
$user = Cache::get('user:'.$id);
return view('profile', ['user' => $user]);
}
}
&#13;
我们可以这样做吗?
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Cache;
use App\Http\Controllers\Controller;
class UserController extends Controller
{
/**
* Show the profile for the given user.
*
* @param int $id
* @return Response
*/
public function showProfile(Cache $cache, $id)
{
$user = $cache->get('user:'.$id);
return view('profile', ['user' => $user]);
}
}
&#13;
从我所看到的,我认为
use Cache;
只是将调用封装到
Illuminate\Support\Facades\Cache
我是对的吗?应用程序引导哪个命名空间到我认为的别名?
更多的澄清肯定会有所帮助。我是laravel的新手。我解释或描述错误的任何事情请指正。谢谢。
答案 0 :(得分:1)
是的,我相信你可以,但我不这样做。相反,请考虑Laravel Facade的目的:一个能够坐在全局命名空间中的类,它允许静态访问给定实例的公共方法。
Laravel Facades只不过是语法糖,我实际上建议尽可能避免使用它们。虽然非常方便,但它们往往会混淆驱动它们的代码。
对于Cache外观,您基本上可以通过查看Facade的代码以及负责所有Cache移动部件的服务提供商来找出正在使用的实际类:
缓存外观
namespace Illuminate\Support\Facades;
/**
* @see \Illuminate\Cache\CacheManager
* @see \Illuminate\Cache\Repository
*/
class Cache extends Facade
{
/**
* Get the registered name of the component.
*
* @return string
*/
protected static function getFacadeAccessor()
{
return 'cache';
}
}
您可以在评论中看到有\Illuminate\Cache\CacheManager
和\Illuminate\Cache\Repository
的引用。那是哪个呢?这里的关键是外观访问器cache
。如果我们查看服务提供者,我们可以看到使用此访问器时Facade返回的类:
缓存服务提供商
class CacheServiceProvider extends ServiceProvider
{
...
public function register()
{
$this->app->singleton('cache', function ($app) {
return new CacheManager($app);
});
$this->app->singleton('cache.store', function ($app) {
return $app['cache']->driver();
});
$this->app->singleton('memcached.connector', function () {
return new MemcachedConnector;
});
$this->registerCommands();
}
...
}
我建议你这样声明你的依赖:
<?php
namespace App\Http\Controllers;
use Illuminate\Cache\CacheManager as Cache;
use App\Http\Controllers\Controller;
class UserController extends Controller
{
/**
* Show the profile for the given user.
*
* @param int $id
* @return Response
*/
public function showProfile(Cache $cache, $id)
{
$user = $cache->get('user:'.$id);
return view('profile', ['user' => $user]);
}
}
我很确定PHP实际上允许您从实例访问静态方法。如果是这种情况,那么以你想到的方式做这件事就需要看起来像这样:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Cache;
use App\Http\Controllers\Controller;
class UserController extends Controller
{
/**
* Show the profile for the given user.
*
* @param int $id
* @return Response
*/
public function showProfile(Cache $cacheFacade, $id)
{
$cache = $cacheFacade->getFacadeRoot()
$user = $cache->get('user:'.$id);
return view('profile', ['user' => $user]);
}
}
希望这有帮助!