2018年laravel教程第1节

PHP框架哪家强?这个问题估计得让PHPer撕起来,别的指标不说,仅从github的受欢迎程度来讲,laravel当之无愧是榜首:

laravel

不管你用的是哪个框架,作为PHP开发者,都很有必要学laravel

laravel虽好,入门门槛却不低,尤其对于习惯了使用thinkphp的同学,切换到laravel还是有些难度的,因此,本系列laravel教程会详细地演示如何用laravel开发一个简易的网站。

功能主要有:

  • 注册、登录

  • 用户增删改查

  • 用户权限管理

  • 文章增删改查

  • 用户互相关注

通过以上业务,我们将熟悉laravel的常用工作流,由于不同人的知识储备不一样,教程不可能顾及到方方面面,如果看到有些环节不懂,直接先跟着写代码即可,后面有的是时间慢慢再消化。

初学一个新的知识,不必追求面面俱到,最重要的是对知识有整体的理解,并将其与自己原有的知识体系挂钩。

搭建项目

laravel对于安装环境的要求是:

  • PHP >= 7.0.0
  • PHP OpenSSL 扩展
  • PHP PDO 扩展
  • PHP Mbstring 扩展
  • PHP Tokenizer 扩展
  • PHP XML 扩展

安装之前确保你的环境满足以上要求。接下来使用composer安装laravel:

☁  program [master] ⚡ composer create-project laravel/laravel LaravelStudy --prefer-dist "5.5.*"

如果你对composer不熟悉,推荐阅读 这一次,真正掌握composer

安装完成后,进入目录,给予storage读写权限

☁  laravelStudy [master] ⚡ chmod -R 777 storage

配置你的web服务器,以nginx为例:

我的本地host配置为:http://local.laravel.com

server {
    listen       80;
    server_name  local.laravel.com;

    location / {
        root    /home/laravelStudy/public;
        index  index.html index.htm index.php;
        try_files $uri $uri/ /index.php?$query_string;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }

    location ~ \.php$ {
        root    /home/laravelStudy/public;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

配置完成后,即可看到默认的欢迎页:

欢迎页

欢迎而对应的页面是:LaravelStudy/resources/views/welcome.blade.php

phpstorm添加laravel代码提示

phpstorm默认对于laravel的支持没那么好,按照以下操作,可以实现phpstorm对laravel的完美支持:

  1. composer安装laravel-ide-helper
☁  laravelStudy [master] ⚡ composer require barryvdh/laravel-ide-helper
  1. LaravelStudy/config/app.php添加以下代码:
Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class,
  1. 在终端执行以下指令:
☁  laravelStudy [master] ⚡ php artisan ide-helper:generate
  1. 重启phpstorm
代码提示

新建路由和控制器

laravel的路由配置文件是:LaravelStudy/routes/web.php

我们重新定义路由:

Route::get('/', 'SiteController@index');
Route::get('login', 'SiteController@login');
Route::get('register', 'SiteController@register');

路由指向的控制器是SiteController,需要生成控制器

终端执行:

☁  laravelStudy [master] ⚡ php artisan make:controller SiteController
Controller created successfully.

laravel自动为我们生成了控制器:LaravelStudy/app/Http/Controllers/SiteController.php

渲染页面

LaravelStudy/app/Http/Controllers/SiteController.php添加以下代码:

    public function index()
    {
        return view('site/index');
    }

    public function login()
    {
        return view('site/login');
    }

    public function register()
    {
        return view('site/register');
    }

创建相应的视图文件

LaravelStudy/resources/views/site/index.blade.php

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    我是主页
</body>
</html>

LaravelStudy/resources/views/site/login.blade.php

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    登录页
</body>
</html>

LaravelStudy/resources/views/site/register.blade.php

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    注册页
</body>
</html>

访问以下url查看效果:

视图文件用blade.php作为后缀,因为Blade 是 Laravel 中提供的一套模板引擎

这三个视图的代码有大量的重复,我们可以定义一个公共的模板文件,再让视图文件共享模板

定义公共模板文件

新建文件:LaravelStudy/resources/views/layouts/default.blade.php

<!DOCTYPE html>
<html>
<head>
    <title>@yield('title', 'Laravel实战')--跟章鱼喵学laravel</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/4.1.0/css/bootstrap.min.css">
    <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
    <script src="https://cdn.bootcss.com/popper.js/1.12.5/umd/popper.min.js"></script>
    <script src="https://cdn.bootcss.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
</head>
<body>
    <div class="container-fluid">
        @yield('content')
    </div>
</body>
</html>

使用bootstrap4作为前端框架

修改原来的视图文件:

LaravelStudy/resources/views/site/index.blade.php

@extends('layouts.default')
@section('content')
@stop

LaravelStudy/resources/views/site/login.blade.php

@extends('layouts.default')
@section('title', '登录')
@section('content')
    <h3>登录页<h3>
@stop

LaravelStudy/resources/views/site/register.blade.php

@extends('layouts.default')
@section('title', '注册')
@section('content')
    <h3>注册页<h3>
@stop

公共头部和底部

网站需要有公共的头部和底部,同样,作为公共的模板文件,依然是放在layouts目录下

新建头部导航:LaravelStudy/resources/views/layouts/_header.blade.php

<nav class="navbar navbar-expand-sm bg-dark navbar-dark">
    <h3 class="text-light text-center col-md-10">laravel教程实战</h3>
    <ul class="navbar-nav col-md-2">
        <li class="nav-item">
            <!--使用命名路由-->
            <a class="nav-link text-info" href="{{ route('login') }}">登录</a>
        </li>
        <li class="nav-item">
            <a class="nav-link text-light" href="{{ route('register') }}">注册</a>
        </li>
    </ul>
</nav>

头部导航中的a标签链接使用了命名路由,可以理解为给路由起了个别名,这个便于扩展,比如,现在登录业务对应的是SiteController@login,以后可能随着业务的改变,要改为UserControoler@login,如果是以硬编码的形式写路由,要修改就很麻烦。

使用命名路由只需要改路由配置文件即可。

LaravelStudy/routes/web.php

Route::get('login', 'SiteController@login')->name('login'); // 命名路由
Route::get('register', 'SiteController@register')->name('register');

新建底部导航:LaravelStudy/resources/views/layouts/_footer.blade.php

<nav class="navbar navbar-expand-sm bg-light navbar-light fixed-bottom">
    <a class="navbar-brand" href="https://www.jianshu.com/u/f9338eda7dda" target="_blank">
        <img src="https://upload.jianshu.io/users/upload_avatars/1864602/07f1bc01-66e5-4ff4-b683-79681856dad3.jpg?imageMogr2/auto-orient/strip|imageView2/1/w/40/h/40" alt="">
    </a>
    <ul class="navbar-nav">
        <li class="nav-item">
            来简书跟着章鱼喵一起学laravel...
        </li>
    </ul>
</nav>

由于头部和底部是局部视图,以下划线作为开头命名,便于区分

在公共模板中引入头部和底部:

LaravelStudy/resources/views/layouts/default.blade.php

    @include('layouts._header')
    <div class="container-fluid">
        @yield('content')
        @include('layouts._footer')
    </div>

效果如下:

首页

小结

知识点总结

如果觉得本教程对你有所帮助,喜欢或打赏,选一个吧...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容