您的位置:首页 > 编程语言 > PHP开发

深入理解Laravel框架--手动创建laravel框架(2)

2017-10-21 16:43 483 查看
在上一章我们利用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框架暂且告一段落。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: