前话:
一直使用ThinkPHP框架,最近计划由tp3升级到tp5,结果发现tp5相关的文档都是收费的,准备弃之,换用Laravel。
工作的环境都是Linux,因此只讨论Linux下的操作,不涉及windows相关。
相对于TP而言,Laravel稍显麻烦,因此写下本文用于帮助找不到头绪的初学者们。
本文不适合对Linux基本操作不了解的人群。
我写本文的目的:
1、你看完本文后,应该能够自己学会安装laravel到系统中;
2、能够理解laravel基本的逻辑实现。
本文的默认环境:
centos环境,具体可参考CentOS7搭建LAMPR环境完整教程 这篇以前写的文章。
安装composer是第一步要做的事情,也是最重要的一步,如果这一步完成不了,那也就无法向下进行了。
推荐使用composer中国全量镜像来进行操作,不推荐使用官方方式。
Packagist / Composer中国全量镜像
执行以下命令安装composer(确保你的php在env path中,如果不在,请使用绝对路径):
php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
php composer-setup.php
执行完以上两条命令后,会发现下载下来一个composer-setup.php文件和composer.phar文件,有用的就是这个composer.phar文件了,将它移动到env path相关的目录下并重命名为composer。
[root@vm composer]#
[root@vm composer]# ls
composer.phar composer-setup.php
[root@vm composer]# env | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/bin/yasm/bin:/root/bin
[root@vm composer]#
[root@vm composer]# cp composer.phar /usr/local/sbin/composer
[root@vm composer]# composer
Do not run Composer as root/super user! See https://getcomposer.org/root for details
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 1.5.3 2017-11-30 18:29:43
当你在命令行直接输入执行composer有如上输出时,就表示composer已经安装成功了。
请注意:按以上操作安装成功后,在“/root/.config/”下会生成一个composer目录。
[root@vm composer]# ls /root/.config/composer/
keys.dev.pub keys.tags.pub
推荐使用国内的Laravel 中国
执行以下指令安装Laravel
[root@vm composer]# composer global require "laravel/installer"
等待一会儿之后,laravel就安装到系统中了。
看文档操作,这时候是不是到了执行laravel new blog来创建一个项目的时候了?但是你执行laravel却提示没有此命令?
原来laravel指令在这里,我们上面说到的目录:
[root@vm composer]# ls /root/.config/composer/vendor/bin/laravel
/root/.config/composer/vendor/bin/laravel
所以,执行的时候需要这样执行:
[root@vm composer]# /root/.config/composer/vendor/bin/laravel new blog
Crafting application...
稍等一段时间后,就会看到blog已经创建好了。(如果提示缺少一些软件包的话,记得安装上)
[root@vm composer]# ls
blog
[root@vm composer]# cd blog/
[root@vm blog]# ll
total 428
drwxr-xr-x 6 root root 4096 Dec 12 16:32 app
-rw-r--r-- 1 root root 1686 Dec 12 16:32 artisan
drwxr-xr-x 3 root root 4096 Dec 12 16:32 bootstrap
-rw-r--r-- 1 root root 1379 Dec 12 16:32 composer.json
-rw-r--r-- 1 root root 141894 Dec 12 16:32 composer.lock
drwxr-xr-x 2 root root 4096 Dec 12 16:32 config
drwxr-xr-x 5 root root 4096 Dec 12 16:32 database
-rw-r--r-- 1 root root 1125 Dec 12 16:32 package.json
-rw-r--r-- 1 root root 1040 Dec 12 16:32 phpunit.xml
drwxr-xr-x 4 root root 4096 Dec 12 16:32 public
drwxr-xr-x 5 root root 4096 Dec 12 16:32 resources
drwxr-xr-x 2 root root 4096 Dec 12 16:32 routes
-rw-r--r-- 1 root root 563 Dec 12 16:32 server.php
drwxr-xr-x 5 root root 4096 Dec 12 16:32 storage
drwxr-xr-x 4 root root 4096 Dec 12 16:32 tests
drwxr-xr-x 36 root root 4096 Dec 12 16:32 vendor
-rw-r--r-- 1 root root 549 Dec 12 16:32 webpack.mix.js
-rw-r--r-- 1 root root 227362 Dec 12 16:32 yarn.lock
[root@vm blog]# cd ..
记得查看一下自己系统的web server用户,然后修改一下此目录的相关权限:
[root@vm composer]# ps -ef | grep httpd
root 5234 1 0 11:26 ? 00:00:01 /usr/sbin/httpd -DFOREGROUND
apache 5235 5234 0 11:26 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 5236 5234 0 11:26 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
root 26597 25290 0 16:46 pts/2 00:00:00 grep --color=auto httpd
[root@vm composer]#
[root@vm composer]# chown apache:apache -R blog/
[root@vm composer]# ll
total 4
drwxr-xr-x 12 apache apache 4096 Dec 12 16:32 blog
[root@vm composer]# ll blog/
total 428
drwxr-xr-x 6 apache apache 4096 Dec 12 16:32 app
-rw-r--r-- 1 apache apache 1686 Dec 12 16:32 artisan
drwxr-xr-x 3 apache apache 4096 Dec 12 16:32 bootstrap
-rw-r--r-- 1 apache apache 1379 Dec 12 16:32 composer.json
-rw-r--r-- 1 apache apache 141894 Dec 12 16:32 composer.lock
drwxr-xr-x 2 apache apache 4096 Dec 12 16:32 config
drwxr-xr-x 5 apache apache 4096 Dec 12 16:32 database
-rw-r--r-- 1 apache apache 1125 Dec 12 16:32 package.json
-rw-r--r-- 1 apache apache 1040 Dec 12 16:32 phpunit.xml
drwxr-xr-x 4 apache apache 4096 Dec 12 16:32 public
drwxr-xr-x 5 apache apache 4096 Dec 12 16:32 resources
drwxr-xr-x 2 apache apache 4096 Dec 12 16:32 routes
-rw-r--r-- 1 apache apache 563 Dec 12 16:32 server.php
drwxr-xr-x 5 apache apache 4096 Dec 12 16:32 storage
drwxr-xr-x 4 apache apache 4096 Dec 12 16:32 tests
drwxr-xr-x 36 apache apache 4096 Dec 12 16:32 vendor
-rw-r--r-- 1 apache apache 549 Dec 12 16:32 webpack.mix.js
-rw-r--r-- 1 apache apache 227362 Dec 12 16:32 yarn.lock
[root@vm composer]#
storage与vendor两个目录权限也要修改一下:
[root@vm blog]# chmod 777 -R storage/ vendor/
[root@vm blog]# ll
total 428
drwxr-xr-x 6 apache apache 4096 Dec 12 16:32 app
-rw-r--r-- 1 apache apache 1686 Dec 12 16:32 artisan
drwxr-xr-x 3 apache apache 4096 Dec 12 16:32 bootstrap
-rw-r--r-- 1 apache apache 1379 Dec 12 16:32 composer.json
-rw-r--r-- 1 apache apache 141894 Dec 12 16:32 composer.lock
drwxr-xr-x 2 apache apache 4096 Dec 12 16:32 config
drwxr-xr-x 5 apache apache 4096 Dec 12 16:32 database
-rw-r--r-- 1 apache apache 1125 Dec 12 16:32 package.json
-rw-r--r-- 1 apache apache 1040 Dec 12 16:32 phpunit.xml
drwxr-xr-x 4 apache apache 4096 Dec 12 16:32 public
drwxr-xr-x 5 apache apache 4096 Dec 12 16:32 resources
drwxr-xr-x 2 apache apache 4096 Dec 12 16:32 routes
-rw-r--r-- 1 apache apache 563 Dec 12 16:32 server.php
drwxrwxrwx 5 apache apache 4096 Dec 12 16:32 storage
drwxr-xr-x 4 apache apache 4096 Dec 12 16:32 tests
drwxrwxrwx 36 apache apache 4096 Dec 12 16:32 vendor
-rw-r--r-- 1 apache apache 549 Dec 12 16:32 webpack.mix.js
-rw-r--r-- 1 apache apache 227362 Dec 12 16:32 yarn.lock
storage目录包含了缓存、日志等相关信息,需要有写权限。
vendor目录下的是composer依赖包。
我们在/var/www/目录下创建一个link指向blog目录:
[root@vm blog]# cd /var/www/
[root@vm www]# ln -s /home/liangjl/composer/blog/ blog
[root@vm www]# ls
blog cgi-bin html
[root@vm www]#
然后修改apache配置指向blog目录,这里我使用的是1045端口:
DocumentRoot "/var/www/blog/"
DirectoryIndex index.html index.php server.php
Options -Indexes +FollowSymlinks
AllowOverride All
Require all granted
记得apache配置文件里要加上“Listen 1045”。
好了,现在我们重启apache服务使配置生效:
[root@vm www]# service httpd restart
Redirecting to /bin/systemctl restart httpd.service
现在,使用浏览器,打开页面看一下,如果出现了以下页面就表示这个名为blog的laravel项目已经跑起来了。
我们修改blog/routes/web.php文件,在末尾增加一行:
Route::get('users', function(){
return 'hello,world!';
});
然后访问“ip:1045/server.php/users”可以看到页面
到这里,你就已经学会laravel里面最简单的路由配置了。
路由有很多功能,平常用的最多的应该是指向Controller下的方法,即如下这种形式:
Route::get('users', 'UserController@show');
这个路由表示的是指向UserController下的show方法。
这里借用文档里的说明。
我们创建两个视图,一个名为layout.blade.php,内容如下:
<html>
<body>
<h1>Laravel Quickstarth1>
@yield('content')
body>
html>
另一个为users.blade.php,内容如下:
@extends('layout')
@section('content')
hello, Taylor!
@stop
同时,需要修改一下路由文件来使我们新加的视图生效,将上面路由那一节我们加的那个路由信息修改为如下形式:
Route::get('users', function(){
return view('users');
});
这时候,刷新web页面,可以看到我们创建的视图已经被加载了。
laravel支持几种数据库在文档里都可以查到,这里说一下数据库的相关配置。
默认配置文件是“config/database.php”,我们使用mysql的时候,可以看到这个配置文件里面很多配置都是使用的'host' => env('DB_HOST', '127.0.0.1')
env的方式,这个意思是“读取环境配置中的相关项,如果没有此项,则使用后面的值”,读取的是“blog/.env”文件中的内容。
所以我们修改数据库配置,直接修改“.env”文件里的相关内容就可以了。
如果没有修改mysql默认配置,那只修改以下几项就可以了:
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=
laravel的大部份代码都是存放在“blog/app/”下,控制器就在“blog/app/Http/Controllers/”目录下。
下面我们通过一个简单的例子,来演示一下laravel控制器+数据库操作+视图+路由的具体实现。
1、首先我们创建一个名为“laravel”的数据库,然后创建一张表,并插入一些数据:
mysql> create database laravel;
mysql> use laravel;
mysql> CREATE TABLE `user` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(16) DEFAULT '',
`age` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
mysql> insert into user(name,age) values('Lucy',18),('Lily',22),('tank',10);
mysql> select * from user;
+----+------+-----+
| id | name | age |
+----+------+-----+
| 1 | Lucy | 18 |
| 2 | Lily | 22 |
| 3 | tank | 10 |
+----+------+-----+
3 rows in set (0.00 sec)
记得“.env”中的数据库配置需要与此相同。
2、现在我们来创建一个控制器文件UserController.php,内容如下:
namespace App\Http\Controllers;
use App\User;
use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;
class UserController extends Controller
{
public function show(){
$users = DB::select('select * from user');
return view('users', ['user' => $users]);
}
}
3、然后,我们需要修改一下视图文件users.blade.php,让视图能够显示我们从Controller中获取到的信息,修改后的内容如下:
@extends('layout')
@section('content')
@foreach($user as $item)
id:
{{ $item->id }}
--
name: {{ $item->name }}
--
age: {{ $item->age }}
@endforeach
@stop
4、最后,我们还需要修改一下路由文件web.php,将之前添加的那条路由修改为如下:
Route::get('users', 'UserController@show');
整体实现逻辑
我们使用users路由时,laravel会去调用UserController控制器下的show()方法来进行处理,而show()方法中,我们获取了laravel数据库user表中的所有信息,共3条记录,将它们传递给了视图users,在视图users中,对传递来的数据进行了foreach输出,形成了最终展示的页面。
看完本文之后,希望你有所收获。
———————结束————————–