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

22 篇文章 0 订阅

在上一章我们利用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数据库testusers表,users表中,有idnameage等相关信息,并插入相关的测试数据
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框架暂且告一段落。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值