在上一章我们利用composer,添加了我们的路由组件并且成功返回了结果。
现在我们来尝试如何构建我们Controller。
添加控制器模块
我们同样也按照laravel的的文件结构添加控制器,首先在你的Http文件下面新建一个Controllers文件夹,用于存放我们所有的控制器,新建一个HomeController.php
文件,
HomeController.php
<?php
namespace App\Http\Controllers;
class HomeController {
public function index () {
return "Welecom ! This is your home page!";
}
}
同时我们要注册我们这一条路由在我们Http\routes.php
文件中。
routes.php文件
<?php
$app['router']->get('/',function(){
return 'Hello World';
});
$app['router']->get('home','App\Http\Controllers\HomeController@index');
?>
最后访问我们的地址http://127.0.0.1/index.php/home
,就能够看到返回响应的结果。
值得注意的,如果想要直接访问/home
,省略掉index.php
,那么需要在apache中进行相应的配置。这个直接在项目的入口文件位置创建静态文件.htaccess
RewriteEngine On
RewriteRule ^ index.php [L]
Model组件
添加完MVC中的控制器之后,我们接着就来添加MVC框架中的M,model
组件。模型组件主要实现数据处理的功能,这部分功能有Laravel框架中illuminate/database
组件来完成。
首先在composer.json中添加illuminate/database
组件信息,然后执行composer update
,或者直接执行composer require illuminate/database 5.*
后面的数字时你的版本信息,具体可以到官网packgist上面查询。
下载完成之后,我们需要实例化一个数据库梳理的类。在实例化之前我们还有一些准备工作需要做
1. 创建mysql
数据库test
和users
表,users
表中,有id
,name
,age
等相关信息,并插入相关的测试数据
2. 根据laravel
的相关文件结构,在项目文件夹下创建一个config
文件夹,然后在config
文件夹中创建一个database.php
文件。
database.php文件夹中的相关设置
<?php
return array(
'driver' => 'mysql',//选择数据库类型
'host' => '127.0.0.1',//数据库的地址
'database' => 'test',//选择数据库
'username' => 'root',//用户名
'password' => '',//密码
'charset' => 'utf8',
'collation' => 'utf8_general_ci',
'prefix' => ''//前缀
);
?>
在我们的入口文件index.php
中,添加如下代码
<?php
//首先引入composer自动加载文件
require __DIR__.'../vendor/autoload.php';
//接着实例化我们的服务容器
$app = new Illuminate/Container/Container();
//将事件和路由注册到我们的服务容器中
with(new \Illuminate\Events\EventServiceProvider($app))->register();
with(new \Illuminate\Routing\RoutingServiceProvider($app))->register();
//再接下来我们就实例化我们的数据库操作模型
$manager = new \Illuminate\Database\Capsule\Manager();
$manager->addConnection(requier '../config/database.php') ;
$manager->bootEloquent();
//加载路由
require __DIR__.'/../app/Http/routes.php';
//实例化请求并分发处理请求
$request = \Illuminate\Http\Request::createFormGlobals();
$response = $app['router']->dispatch($request);
$response->send();
?>
上面一端实例化数据库Illuminate\Database\Capsule\Manager
的过程,通过addConnection()
函数完成数据库的相关配置并通过bootEloquent
函数完成了数据库Eloquent ORM
模块的启动。简单来说,通过配置连接数据库,并且启动ORM模块。(ORM 指 object relationship mapping,是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换)
ORM
方式操作数据库需要两个步骤来实现,一个创建模型,二通过模型类的方法操作数据库。
接着在我们的app文件夹中创建一个名为User.php的model,需要注意的是User这个模型对应的数据库就是小写user后面加上复数,也就是users这张表。当然也可以通过protect $table变量指定对应的表。
User.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model {
public $timestamps = false;
}
然后我们就可以使用我们ORM来操作数据了,我们在HomeController.php
文件中的index
方法中来操作。
HomeController.php文件
<?php
namespace App\Http\Controllers;
use App\User;
class HomeController {
public function index()
{
$user = User::first();
return $user;
}
}
这时候访问我们的http://127.0.0.1/home
,就能看到返回的用户数据了。
添加视图组件
接着我们添加MVC框架中V,Laravel中实现V层,使用了illuminate/view
组件,所以我们使用
composer require illuminate/view
下载到我们的项目中,然后修改我们项目的入口文件index.php
<?php
//use Illuminate\Database\Capsule\Manager;
//引入自动加载文件
require __DIR__.'/..'.'/vendor/autoload.php';
//实例化服务器容器,注册事件、路由器服务提供商
$app = new Illuminate\Container\Container();
\Illuminate\Container\Container::setInstance($app);
with(new \Illuminate\Events\EventServiceProvider($app))->register();
with(new \Illuminate\Routing\RoutingServiceProvider($app))->register();
//启动Eloquent ORM 模块并进行相关配置
$manager = new \Illuminate\Database\Capsule\Manager();
$manager->addConnection(require '../config/database.php');
$manager->bootEloquent();
$app->instance('config',new \Illuminate\Support\Fluent());
$app['config']['view.compiled'] = __DIR__."/../storage/framework/views/";
$app['config']['view.paths'] = ["E:\\www\\lara\\resources\\views"];
with(new \Illuminate\View\ViewServiceProvider($app))->register();
with(new \Illuminate\Filesystem\FilesystemServiceProvider($app))->register();
//加载路由
require __DIR__.'/../app/Http/routes.php';
//实例化请求并分发处理请求
$request = \Illuminate\Http\Request::createFromGlobals();
$response = $app['router']->dispatch($request);
$response->send();
同时修改Controller中的代码,使用视图,在laravel项目文件夹创建resource/views/
文件夹,并创建 home.blade.php
<?php
namespace App\Http\Controllers;
use App\Models\Student;
use App\User;
use Illuminate\Container\Container;
class HomeController {
public function index()
{
$user = User::first();
$app = Container::getInstance();
$factory = $app->make('view');
return $factory->make('home')->with('user',$user);
}
}
这段代码要说的内容比较多,暂时先放到后面在说。
手动创建Laravel框架暂且告一段落。