美高梅开户-美高梅官方网站开户

您的位置:美高梅开户 > 美高梅官方网站开户 > 新版本特性详解

新版本特性详解

发布时间:2019-08-09 19:10编辑:美高梅官方网站开户浏览(87)

    译注: 期待 Laravel 5.0 已经相当久十分久了, 之前跳票说要到二零一四年6月份发表. 从四月份就直接在刷新官方网站和博客, 始终未有更新的消息, 明天终于看出官方网址文书档案切换来了 5.0 版. 新本子带来了广大令人激动的新特征, 特别是定期职分队列和表单必要三个特点, 光看一下翻新表明中的简介都不禁要上手尝试了. 前几天总算收取一点年华把官方的新特征表达文档简单地翻译了一晃, 希望全数爱好 Laravel 框架的爱人都能感受到这几个版本带来的欢欣的改换. 当然, 要是你需求的是 Phalcon 那样的天性, 那它分明不是你要求的. 倘若您是因为设想主机不帮忙 php 5.4 而不可能享用 Laravel, 那你还不扔了你的虚构主机??? 阿里云腾讯云linode... VPS的选拔不要太多...

    目录结构转换

    Laravel 5.0

    laravel5开首重申的是种类目录结构的成形,与4.2组别仍然蛮大的,逐条来讲吧。

    Laravel 5.0 引入了斩新的门类目录结构. 新的目录结构更有益于用 Laravel 来创立应用. 5.0 版原原本本都选取了新的 PSHighlander-4 自动加载标准. 以下是 5.0 版珍视的新特色:

    新的目录结构看上去像那样:

    目录结构

    app
        Commands
        Console
        Events
        Handlers
            Commands
            Events
        Http
            Controllers
            Middleware
            Requests
            Kernel.php
            routes.php
        Providers
        Services
    bootstrap
    config
    database
        migrations
        seeds
    public
        package
    resources
        lang
        views
    storage
        cache
        logs
        meta
        sessions
        views
        work
    tests

    从前版本中的 app/models 目录被全体移除. 近日你能够一直把代码放在 app 目录下, 该目录下的具备代码私下认可会被组织到 app 命名空间. 那些命名空间是足以由此新扩展的 Artisan 命令 app:name 来修改的.

    4.2的目录结构:

    Controllers, middleware 和 requests (Laravel 5.0 新添的一连串) 被公司到 app/Http 目录, 因为他俩都以与你使用的 HTTP 传输层相关的类. 与前边把全部路由过滤器放到单一的 filters 文件下区别, 今后抱有的 middleware (类似事先的 route filter) 被分级存放到各自自个儿的类公事中.

    app
        commands
        config
        controllers
        database
        lang
    美高梅官方网站开户 ,    models
        start
        storage
        tests
        views
    bootstrap
    public
    相比较一下,改变如故相当大的,能够见到 config,database被移动到根目录,lang,views目录被活动到resources目录下,controllers被重组到http目录里,models目录不见了,还会有局地激增的目录就略了。

    新本子中扩展了贰个 app/Providers 目录来替代从前 4.x 版本的 app/start 文件. 这几个 service providers 为利用提供琳琅满指标辅导格局, 比方错误管理, 日志记录, 路由加载等. 除了这几个之外你本来也能够成立额外的 service providers.

    App命名空间

    运用的言语文件和视图被移到了 resources 目录.

    laravel5里还会有三个变迁,那便是app目录暗许加上了三个根命名空间 App ,在 App 下的具备目录、类都应该在该命名空间下,一句话来讲正是运用了psr4规范。

    Contracts

    HTTP

    Laravel 的有着主要组件都落实了寄存在 illuminate/contracts 酒店中的接口. 该酒馆未有额外的依赖项. 具备如此一个方便的, 聚集存放的接口群集, 你就可以很轻易地经过它来对 Laravel Facades 举行解耦和凭仗注入方面包车型地铁选用和修改.

    laravel5以为,新的目录结构是时下最棒的布局之一,能够让我们的付出越发弹无虚发,比方http目录:

    问询有关 contracts 的越多音讯, 能够查阅它的完整文书档案.
    路由缓存

    Http
        Controllers
        Middleware
        Requests
        Kernel.php
        routes.php
    Middleware 很不熟悉,其实它是本来的路由filter的一个升格版,以往绝不在filters.php里定义过滤器,替代它的是在 Middleware 目录中创造类,并在Kernel.php中铺排全局如故可选,全局的Middleware在各种央求都会进行,而可选的就相当于原本的filter,能够在路由中行使,也足以在调整器中动用。

    假使你的施用由多姿多彩的调控器路由 (controller routes) 组成, 你能够行使新添的 Artisan 命令 route:cache 大幅进步路由的挂号速度. 那在路由数据超越 100 个的使用中越发有效, 能够 大幅度升高全部应用在路由一些的速度.

    Requests是对主题类Request的增加,你能够扩充不相同的Requests类,加多差异的功效。

    路由中间件 (Route Middleware)

    能够感觉,全部有关http必要有关的管理都在http目录中,例如调节器正是用来接受多少个伸手并再次来到的,所以将它放在 Http 目录里成立。

    在 4.0 版风格的路由 "过滤器" 基础上, 新版 5.0 已经协助 HTTP 中间件, Laravel 自带的 "authentication" 和 "filters" 已经被转变来人中学间件. 中间件为具有品类的过滤器提供了单一接口, 你能够很轻巧地对诉求进行核查和拒绝.

    路由

    摸底有关中间件的越来越多消息, 能够查阅它的总体文书档案.

    路由跟从前的分别十分小,但是急需专注的当我们钦点调节器命名空间时,命名空间不是相对路线,而是相对于 AppHttpControllers,举例:

    调整器方法注入

    复制代码 代码如下:

    除了现存的构造器注入以外, 在新本子中还是能在调整器方法中的重视项实行项目约束. IoC container会自行注入重视项, 即便在路由包蕴别的参数的时候也是.

    Route::controllers([
        'auth' => 'AuthAuthController',
        'password' => 'AuthPasswordController',
    ]);

    复制代码 代码如下:

    能够在 App/Http/Controllers/Auth 目录下找到相应的类。

    public function createPost(Request $request, PostRepository $posts)
    {
        //
    }

    除此以外,路由还帮忙缓存,以提高质量,通过命令行工具

    表达脚手架

    复制代码 代码如下:

    用户注册, 认证以及密码重新恢复设置调整器已经内置在 5.0 版的网址框架中, 除了调节器以外, 还应该有简单的视图, 寄放在 resources/views/auth 目录. 除外, 网址起头框架中还包涵了三个 "users" 表的 migration 文件. 那个归纳的能源扶持开辟者不用在用户认证效能上花费一大波时间. 认证相关的页面能够因此 auth/login 和 auth/register 那四个路由访谈. AppServicesAuthRegistrar 服务承受处理创设和注脚用户.

    php artisan route:cache

    事件目的

    就可以轻易转移,也得以因此

    在新本子中, 你能够把事件定义成对象并不是字符串. 看下边包车型客车例证:

    复制代码 代码如下:

    复制代码 代码如下:

    php artisan route:clear

    class PodcastWasPurchased {
     
        public $podcast;
     
        public function __construct(Podcast $podcast)
        {
            $this->podcast = $podcast;
        }
     
    }

    理清缓存。

    以这件事件能够这么调用:

    Services

    Event::fire(new PodcastWasPurchased($podcast));
    自然, 你的事件管理程序收到的也不再是多个数据列表, 而是一个平地风波目的:

    我们看看在App目录下还会有三个Services目录,作者感觉那是一个绝对的赞的理念,长久以来,作者都对此调整器中冒出大段的事体逻辑代码而苦恼,笔者很想用三个独立的层把这几个工作逻辑封装起来,而services就能够用来干这一个活,当然,它不是必须的,但小编刚强建议使用。就以laravel5自带的demo来拜会吧:

    复制代码 代码如下:

    复制代码 代码如下:

    class ReportPodcastPurchase {
     
        public function handle(PodcastWasPurchased $event)
        {
            //
        }
     
    }

    # 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:

    命令/队列

    复制代码 代码如下:

    在 4.0 版援救的职责队列基础上, 5.0 匡助把职务队列定义为简单的一声令下对象. 这一个命令寄存在 app/Commands 目录. 上边是八个回顾的下令示例:

    <?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']),
            ]);
        }
    }

    复制代码 代码如下:

    提交用户名密码时的管理:

    class PurchasePodcast extends Command implements SelfHandling, ShouldBeQueued {
     
        use SerializesModels;
     
        protected $user, $podcast;
     
        /**
         * 创造新的下令实例
         *
         * @return void
         */
        public function __construct(User $user, Podcast $podcast)
        {
            $this->user = $user;
            $this->podcast = $podcast;
        }
     
        /**
         * 试行命令
         *
         * @return void
         */
        public function handle()
        {
            // 管理购买播客摄像的逻辑
     
            event(new PodcastWasPurchased($this->user, $this->podcast));
        }
     
    }

    复制代码 代码如下:

    Laravel 的根基调控器 (base controller) 使用了新的 DispatchesCommands 特性, 允许你很有利地监督命令的实行:

    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());
    }

    $this->dispatch(new PurchasePodcastCommand($user, $podcast));
    理所必然, 你不独有能够把命令用于职务队列(非同步试行), 也得以用来共同职责. 事实上, 把您的行使供给进行的纷纭职分封装成命令是三个很好的选用. 掌握有关命令的更多新闻, 能够查阅命令桥的事无巨细文书档案.

    能够看到,表单验证的事务逻辑仅仅一行:

    数据库队列

    复制代码 代码如下:

    新版 Laravel 包涵 database 队列驱动, 提供轻易的, 本地的类别驱动, 没有必要安装额外的包. (译注:譬如让不援救职业的数据库举行类似事情的数据操作)

    $validator = $this->registrar->validator($request->all());

    Laravel 定期职责

    整整调节器的代码显得干净易读,我们能够把无数通用的政工逻辑封装成service,比不正经地一贯封装在支配器类好。

    在过去, 为了定期实行调节台任务, 开荒者必须信赖 Cron 职务. 那带来相当的大不便. 因为定时职务并不满含在网址的源代码中, 而且必须通过 SSH 登入到服务器去加多 Cron 职务. 新版 Laravel 的按时职分允许开发者在 Laravel 框架内来定义定期实施的授命, 然后只须求在服务器上定义三个总的 Cron 职分就能够.

    模型

    比如:

    models目录不见了,因为不是怀有应用都急需用到数据库的,所以laravel5暗许不提供该目录能够知晓,并且由于提供了 App 这些namespace,所以我们能够协和在 App/ 下创办 Models 目录,个中具备模型类都声名namespace AppModels;就可以,只是使用上比在此在此之前麻烦一些,必要先use,不过如此也使得项目布局更为清晰,一切类库都在命名空间的集体之下。

    复制代码 代码如下:

    时刻有限,先写那样多吧。希望我们能够欣赏。

    $schedule->command('artisan:command')->dailyAt('15:00');

    您只怕感兴趣的稿子:

    • 跟笔者学Laravel之迅捷入门
    • Laravel 5 框架入门(一)
    • 跟我学Laravel之配置Laravel
    • Laravel框架学习笔记(一)情状搭建
    • laravel技艺之查询构造器Query Builder叠合链式调用的不二诀要

    本文由美高梅开户发布于美高梅官方网站开户,转载请注明出处:新版本特性详解

    关键词: 美高梅开户