启动方式
方式一 : Laravel 提供了更简单的方式(相比配置 Apache)
## 一定要保证 php.exe 已经加入到环境变量中, 当前目录是在 artisan 所在的目录
## 然后输入如下的命令, 切记执行完成后不能关闭该窗口
D:\works\laravel_test_com>php artisan serve
Laravel development server started: <http://127.0.0.1:8000>
## 然后我们在浏览器中输入 127.0.0.1:8000 就可以看到运行的结果.
和 Apache 没有关系, 因为我们没有启动 Apache 软件, 但是当我们使用该方式启动时, 执行命令的窗口一定不能关闭, 否则网站不能访问.
个人不推荐使用, 理由如下 :
- 能够跑起来 php 代码, 但是不启动数据库
- 该方式启动后, 如果修改了项目的配置 .env 的话, 需要重新启动才会生效, 所以推荐使用方法二
方法二 : Apache/Nginx (推荐)
Apache 配置
## 打开 Apache 的虚拟主机配置文件
## 代码如下, 一定要配置到 项目所在的目录中 public 目录中的 入口文件处
<VirtualHost 127.0.0.1:80>
DocumentRoot "D:\works\laravel_test_com\public"
ServerName laravel.test.com
<Directory "D:\works\laravel_test_com\public">
allow from all
AllowOverride all
Options +indexes
</Directory>
</VirtualHost>
## 然后打开 hosts 文件, 添加如下
127.0.0.1 laravel.test.com
## 然后重启 Apache, 打开浏览器, 输入我们绑定的域名 laravel.test.com
路由
将用户的请求按照事先规划好的方案提交给指定的控制器或者功能函数来进行处理, 其实就是访问地址形式, 在 Laravel 中, 路由必须要手工进行配置.
路由配置文件
路由配置文件的位置 : routes/web.php 文件, 然后我们来查看一下文件的内容.
// 默认的根路由, 访问域名时, 系统自动跳转到 web.php 文件, 查找匹配的路由规则
Route::get('/', function () {
return view('welcome'); // view 方法, 输出视图文件.
});
路由定义格式
基本格式
## 路由定义格式
Route::请求方式("请求的URL", 匿名函数或控制响应的方法);
## 比如我们定义一个, 访问根目录, 输入一个 Hello World 的路由规则
Route::get("/", function(){
return 'hello world';
});
## 然后我们输入我们定义的域名, 就可以看到更改的结果.
## 在定义一个路由规则, 然后访问 域名/home 即可
Route::get('/home', function(){
echo '/home的路由规则';
});
其他格式
基本方式实现的只能是响应一个请求方式, 如果我们想要一个路由响应多种请求方式, 应该怎么处理呢?
具体看如下演示 :
## match 只匹配数组中指定的响应方式
## Route::match([匹配的请求类型], 地址, 回调);
Route::match(['get', 'post'], '/', function(){
echo 'get/post 请求都可以响应';
});
## any 响应所有的 HTTP 请求方式
Route::any('/foo', function(){
echo '/foo 响应所有 Http 的请求方式';
});
总结
我们只要记住常用的四个就好了 : get / post / match / any
- get : 支持 get 请求方式的路由
- post : 支持 post 请求方式的路由
- match : 支持匹配固定(自定义)的请求方式的路由
- any : 匹配任意请求方式的路由
路由参数
路由参数就是给路由传递参数, 比如我们访问文章的时候, 需要知道文章的 id, 然后得到文章内容等等. 就需要我们来传递数据, 那么我们如何来获取传递的参数呢?
路由参数总是通过花括号进行包裹(不需要使用 $ 符号), 这些参数在执行的时候会被传递到路由的闭包. 路由参数中不能包含 ‘-‘ 符号, 需要的话, 可以使用 ‘_’ 替代.必选参数
## 定义一个必选参数规则
Route::get('/user1/{id}', function($id){
echo '当前用的id为 : '.$id;
});
## 访问 http://laravel.test.com/user1/888
当前用的id为 : 888
## 访问 http://laravel.test.com/user1/
出现错误提示 NotFoundHttpException
可选参数
## 定义一个可选参数规则, 参数后边需要加上一个 ?
Route::get('/user2/{id?}', function($id = null){
echo '当前用的id为 : '.$id;
});
## 访问 http://laravel.test.com/user2/888
当前用的id为 : 888
## 访问 http://laravel.test.com/user2
当前用的id为 :
? 形式传递参数
这种写法不需要讲参数部分写进路由文件 web.php 中.
## 通过 ? 的形式传递参数
Route::get('/user3', function(){
echo '当前用的id为 : '.(isset($_GET['id']) ? $_GET['id'] : 0);
});
## 访问 http://laravel.test.com/user3?id=888
当前用的id为 : 888
## http://laravel.test.com/user3
当前用的id为 : 0
路由别名
路由别名相当于在路由定义的时候, 为路由起了一个别名, 在以后的程序中可以通过别名来获取路由的信息.
## u4 是我们定义的一个名字
Route::get('/user4', function(){
echo '当前用的id为 : '.(isset($_GET['id']) ? $_GET['id'] : 0);
})->name('u4');
我们以后调用该路由则可以写成 route('u4');
然后我们再来查看一下我们定义的路由, 通过命令行的形式 :
D:\works\laravel_test_com>php artisan route:list
+--------+----------------------------------------+-------------+------+---------+--------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------------------------------------+-------------+------+---------+--------------+
| | GET|HEAD | / | | Closure | web |
| | GET|HEAD | api/user | | Closure | api,auth:api |
| | GET|HEAD|POST|PUT|PATCH|DELETE|OPTIONS | home | | Closure | web |
| | GET|HEAD | user1/{id} | | Closure | web |
| | GET|HEAD | user2/{id?} | | Closure | web |
| | GET|HEAD | user3 | | Closure | web |
| | GET|HEAD | user4 | u4 | Closure | web |
+--------+----------------------------------------+-------------+------+---------+--------------+
路由群组
比如我们的后台有如下的路由 : /admin/login, /admin/logout, /admin/index 等等, 他们都有 /admin/ 前缀, 为了方便我们书写和管理, 我们可以把他们放到一个路由分组中, 使用 prefix 属性执行路由前缀. 示例如下 :
## 定义一下规则
Route::group(['prefix'=>'admin'], function(){
Route::get('users', function(){
echo '/admin/users';
});
Route::get('index', function(){
echo '/admin/index';
});
});
## http://laravel.test.com/admin/users
/admin/users
## http://laravel.test.com/admin/index
/admin/index