清理缓存。 Services 我们看到在App目录下还有一个Services目录,我觉得这是一个很赞的理念,一直以来,我都对于控制器中出现大段的业务逻辑代码而烦躁,我很想用一个单独的层把这些业务逻辑封装起来,而services就可以用来干这个活,当然,它不是必须的,但我强烈建议使用。就以laravel5自带的demo来看看吧: 复制代码 代码如下: # Http/Controllers/Auth/AuthController.php <?php namespace AppHttpControllersAuth; use AppHttpControllersController; use IlluminateContractsAuthGuard; use IlluminateContractsAuthRegistrar; use IlluminateFoundationAuthAuthenticatesAndRegistersUsers; class AuthController extends Controller { /* |-------------------------------------------------------------------------- | Registration & Login Controller |-------------------------------------------------------------------------- | | This controller handles the registration of new users, as well as the | authentication of existing users. By default, this controller uses | a simple trait to add these behaviors. Why don"t you explore it? | */ use AuthenticatesAndRegistersUsers; /** * Create a new authentication controller instance. * * @param IlluminateContractsAuthGuard $auth * @param IlluminateContractsAuthRegistrar $registrar * @return void */ public function __construct(Guard $auth, Registrar $registrar) { $this->auth = $auth; $this->registrar = $registrar; $this->middleware("guest", ["except" => "getLogout"]); } }
这是一个登陆授权的控制器,我们看 __construct构造函数,利用参数自动注入了一个 "接口实现(参考手册IoC)" 的绑定,我们看下Registrar: 复制代码 代码如下: <?php namespace AppServices; use AppUser; use Validator; use IlluminateContractsAuthRegistrar as RegistrarContract; class Registrar implements RegistrarContract { /** * Get a validator for an incoming registration request. * * @param array $data * @return IlluminateContractsValidationValidator */ public function validator(array $data) { return Validator::make($data, [ "name" => "required|max:255", "email" => "required|email|max:255|unique:users", "password" => "required|confirmed|min:6", ]); } /** * Create a new user instance after a valid registration. * * @param array $data * @return User */ public function create(array $data) { return User::create([ "name" => $data["name"], "email" => $data["email"], "password" => bcrypt($data["password"]), ]); } }
提交用户名密码时的处理: 复制代码 代码如下: public function postRegister(Request $request) { $validator = $this->registrar->validator($request->all()); if ($validator->fails()) { $this->throwValidationException( $request, $validator ); } $this->auth->login($this->registrar->create($request->all())); return redirect($this->redirectPath()); }