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的完美支持:
- 用composer安装
laravel-ide-helper
☁ laravelStudy [master] ⚡ composer require barryvdh/laravel-ide-helper
- 在
LaravelStudy/config/app.php
添加以下代码:
Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class,
- 在终端执行以下指令:
☁ laravelStudy [master] ⚡ php artisan ide-helper:generate
- 重启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'); }</code></pre></div></div><p>创建相应的视图文件</p><p><code>LaravelStudy/resources/views/site/index.blade.php</code></p><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0"><!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>
效果如下:
首页
小结