咱们须要为咱们的项目构建一个基础的页面布局,布局文件统一存放在 resources/views/layouts
文件夹中,布局涉及的文件以下:php
咱们先建立主要布局文件:resources/views/layouts/app.blade.php
:css
$ mkdir -p resources/views/layouts/ $ touch resources/views/layouts/app.blade.php
resources/views/layouts/app.blade.phphtml
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- CSRF Token --> <meta name="csrf-token" content="{{ csrf_token() }}"> <title>@yield('title', 'Laravel Shop') - Laravel 电商教程</title> <!-- 样式 --> <link href="{{ mix('css/app.css') }}" rel="stylesheet"> </head> <body> <div id="app" class="{{ route_class() }}-page"> @include('layouts._header') <div class="container"> @yield('content') </div> @include('layouts._footer') </div> <!-- JS 脚本 --> <script src="{{ mix('js/app.js') }}"></script> </body> </html>
route_class()
是咱们自定义的辅助方法,咱们还须要在 helpers.php
文件中添加此方法:前端
bootstrap/helpers.phpnode
function route_class() { return str_replace('.', '-', Route::currentRouteName()); }
此方法会将当前请求的路由名称转换为 CSS 类名称,做用是容许咱们针对某个页面作页面样式定制。在后面的章节中会用到。webpack
下面建立顶部导航模板:laravel
$ touch resources/views/layouts/_header.blade.php
resources/views/layouts/_header.blade.phpgit
<nav class="navbar navbar-default navbar-static-top"> <div class="container"> <div class="navbar-header"> <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#app-navbar-collapse"> <span class="sr-only">Toggle Navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="{{ url('/') }}"> Laravel Shop </a> </div> <div class="collapse navbar-collapse" id="app-navbar-collapse"> <ul class="nav navbar-nav"> </ul> <ul class="nav navbar-nav navbar-right"> <li><a href="#">登陆</a></li> <li><a href="#">注册</a></li> </ul> </div> </div> </nav>
注册登陆连接咱们将在后面章节中修改。web
建立文件:shell
$ touch resources/views/layouts/_footer.blade.php
resources/views/layouts/_footer.blade.php
<footer class="footer"> <div class="container"> <p class="pull-left"> 由 <a href="http://weibo.com/u/1837553744?is_hot=1" target="_blank">Leo</a> 设计和编码 <span style="color: #e27575;font-size: 14px;">❤</span> </p> <p class="pull-right"><a href="mailto:root@leo108.com">联系咱们</a></p> </div> </footer>
咱们将使用控制器 PagesController
来处理全部自定义页面的逻辑,并使用 root()
方法来处理首页的展现。
执行如下命令新建控制器:
$ php artisan make:controller PagesController
将会生成 app/Http/Controllers/PagesController.php
这个文件,咱们里面新增 root()
方法:
app/Http/Controllers/PagesController.php
. . . public function root() { return view('pages.root'); }
控制器 root()
方法中加载了视图 pages.root
,目前咱们尚未此视图文件,前往建立:
$ mkdir -p resources/views/pages/ $ touch resources/views/pages/root.blade.php
resources/views/pages/root.blade.php
@extends('layouts.app') @section('title', '首页') @section('content') <h1>这里是首页</h1> @stop
Laravel 自带了一个主页视图 welcome.blade.php
,既然咱们已经自定义了主页视图,便可将废弃的主页视图删除:
$ rm resources/views/welcome.blade.php
接下来绑定下路由,将 web.php
里的内容替换掉:
routes/web.php
<?php Route::get('/', 'PagesController@root')->name('root');
Laravel Mix 一款前端任务自动化管理工具,使用了工做流的模式对制定好的任务依次执行。Mix 提供了简洁流畅的 API,让你可以为你的 Laravel 应用定义 Webpack 编译任务。Mix 支持许多常见的 CSS 与 JavaScript 预处理器,经过简单的调用,你能够轻松地管理前端资源。
使用 Mix 很简单,首先你须要使用如下命令安装 npm 依赖便可。咱们将使用 Yarn 来安装依赖,在这以前,由于国内的网络缘由,咱们还需为 Yarn 配置安装加速:
$ yarn config set registry https://registry.npm.taobao.org
使用 Yarn 安装依赖:
$ SASS_BINARY_SITE=http://npm.taobao.org/mirrors/node-sass yarn
在 yarn
命令前添加 SASS_BINARY_SITE=http://npm.taobao.org/mirrors/node-sass
的目的是告诉 yarn
到淘宝的镜像去下载 node-sass
二进制文件。
而后咱们还须要修改一下 Mix 的配置文件:
webpack.mix.js
. . . mix.js('resources/assets/js/app.js', 'public/js') .sass('resources/assets/sass/app.scss', 'public/css') .version();
在末尾加了一个 version()
,使 Mix 每次生成的静态文件后面加上一个相似版本号的参数,避免浏览器缓存。
而后,运行如下命令便可:
$ npm run watch-poll
watch-poll
会在你的终端里持续运行,监控 resources
文件夹下的资源文件是否有发生改变。在 watch-poll
命令运行的状况下,一旦资源文件发生变化,Webpack 会自动从新编译。
注意:在后面的课程中,咱们须要保证
npm run watch-poll
一直处在执行状态中。
Windows 用户若是遇到报错请参考 https://learnku.com/laravel/t/13277/in-learning-lessons-there-are-always-craters-recording-solutions
接下来咱们来调整一下样式,样式代码在 resources/assets/sass/app.scss
,是用 SASS 编写的,最终会由 Mix 来编译成 CSS。
resources/assets/sass/app.scss
@import "variables"; // Bootstrap @import "~bootstrap-sass/assets/stylesheets/bootstrap"; // 通用样式 body { font-family: Hiragino Sans GB, "Hiragino Sans GB", Helvetica, "Microsoft YaHei", Arial,sans-serif; } /* 顶部导航 */ .navbar-static-top { border-color: #e7e7e7; background-color: #fff; box-shadow: 0px 1px 11px 2px rgba(42, 42, 42, 0.1); border-top: 4px solid #00b5ad; margin-bottom: 40px; margin-top: 0px; } /* 底部样式 */ html { position: relative; min-height: 100% ; } body { margin-bottom: 60px; } .footer { position: absolute; bottom: 0; width: 100% ; /* Set the fixed height of the footer here */ height: 60px; background-color: #000; .container { padding-right: 15px; padding-left: 15px; p { margin: 19px 0; color: #c1c1c1; a { color: inherit; } } } }
再到浏览器中刷新页面看看效果:
至此,咱们完成了基础页面结构的构建。
在加入版本库以前咱们先执行 git status
看看新增了哪些文件:
能够看到 Mix 还生成了 public/fonts
和 public/mix-manifest.json
,这也是不须要加入版本库的,在 .gitignore
中添加这两项:
.gitignore
. . . /public/fonts /public/mix-manifest.json
再次执行 git status
看看咱们的变动是否生效:
确认没有问题,如今让咱们将这些文件加入到版本控制中:
$ git add -A $ git commit -m "基础布局"
上面是一系列操做,主要就是将前端的页面框架布局出来。也没有什么特别难的,按着操做就好,不懂的先记下来,