您现在的位置是:网站首页 > 脚本编程>

laravel学习之创建控制器及分组

2019-02-25227人围观
简介 在上一篇文章主要介绍如何使用composer安装laravel,在本篇文章中介绍laravel目录、书写路由规则、如何使用laravel创建一个简单的控制前以及如何在前端页面输出定义的变量。

在上一篇文章主要介绍如何使用composer安装laravel,在本篇文章中介绍一下如何使用laravel创建一个简单的控制前以及如何在前端页面输出定义的变量。

一、laravel目录介绍

1.App目录

app 目录包含了应用的核心代码,此外你为应用编写的代码绝大多数也会放到这里;

app目录下面包含了Console、Exceptions、Http、Providers四个目录

Console目录包含了所有自定义的 Artisan 命令。这些命令可以通过 make:command 来生成。这个目录还包含了控制台内核,可以用来注册你的自定义 Artisan 命令和你定义的 计划任务 的地方。

Exceptions目录包含了应用的异常处理器,也是应用抛出异常的好地方。如果想自定义记录或者渲染异常的方式,你就要修改此目录下的 Handler 类。

Http 目录包含了控制器、中间件和表单请求。几乎所有的进入应用的请求的处理逻辑都被放在这里。

Providers 目录包含了应用的所有 服务提供器。服务提供器通过在服务容器中绑定服务、注册事件、以及执行其他任务来为即将到来的请求做准备来启动应用。

2.Bootstrap目录

bootstrap目录包含了少许文件,用于框架的启动和自动载入配置,还有一个cache文件夹用于包含框架为提升性能所生成的文件,如路由和服务缓存文件;

3.Config目录

config 目录包含了应用所有的配置文件,建议通读一遍这些配置文件以便熟悉所有配置项;

4.Database目录

database 目录包含了数据迁移及填充文件,如果你喜欢的话还可以将其作为 SQLite 数据库存放目录;

5.Public目录

public 目录包含了入口文件 index.php 和前端资源文件(图片、JavaScript、CSS等),在绑定域名的时候直接绑定到该目录。

6.Resources目录

resources 目录包含了视图文件及原生资源文件(LESS、SASS、CoffeeScript),以及本地化语言文件;

7.Routes目录

    routes 目录包含了应用的所有路由定义。Laravel默认提供了四个路由文件:channels.php、web.php、api.php和console.php。

web.php 文件包含的路由都会应用web中间件组,具备Session、CSRF防护以及Cookie加密功能,如果应用无需提供无状态的、RESTful风格的API,所有路由都会定义在web.php文件。

api.php 文件包含的路由应用了api中间件组,具备频率限制功能,这些路由是无状态的,所以请求通过这些路由进入应用需要通过token进行认证并且不能访问Session状态。

console.php 文件用于定义所有基于闭包的控制台命令,每个闭包都被绑定到一个控制台命令并且允许与命令行IO方法进行交互,尽管这个文件并不定义HTTP路由,但是它定义了基于控制台的应用入口(路由)。

channels.php用来注册你的应用支持的所有的事件广播渠道的地方。

8.Storage目录

storage目录包含了编译过的Blade模板、基于文件的session、文件缓存,以及其它由框架生成的文件,该目录被细分为成app、framework和logs子目录,app目录用于存放应用要使用的文件,framework目录用于存放框架生成的文件和缓存,最后,logs目录包含应用的日志文件;

storage/app/public目录用于存储用户生成的文件,比如可以被公开访问的用户头像,要达到被访问的目的,你还需要在public目录下生成一个软连接 storage 指向这个目录。你可以通过 php artisan storage:link 命令生成这个软链接。

9.Tests目录

tests 目录包含自动化测试,其中已经提供了一个开箱即用的PHPUnit示例;每一个测试类都要以 Test 开头,你可以通过 phpunit 或 php vendor/bin/phpunit 命令来运行测试。

10.Vendor目录

vendor目录包含所有Composer依赖。

二、创建控制器

所有的控制器都被存放在 app/Http/Controllers 目录下,所有的类文件均使用驼峰命名方式,都是以.php结尾,例如 IndexController.php。该控制器继承了 Laravel 内置的基础控制器类。

<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller; 
class IndexController extends Controller
{
    public function index()
    {
        echo "Hello World";
    }
}
?>

在浏览器中访问 www.newlaravel.com 就可以输出 Hello World

三、将定义的变量输出到模板

<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller; 
class IndexController extends Controller
{
    public function index()
    {
        $str= "Hello World";
        return view("index",["str"=>$str]);
    }
}
?>

在index.blade.php模板中直接输入 {{$str}}(模板存放在Resources目录下的views中) 

在浏览器中访问 www.newlaravel.com 就可以输出 Hello World

四、如何创建分组 

一个项目都有前端和后端之分,那么如何在laravel中创建分组?在app/Http/Controllers目录中自行创建“Admin”、“Home”等分组,与之相对的也需要在Resources/views目录中创建 “admin”、“home”等分组(非必须创建的,可以多个模块共用一个模板)。

1.在app/Http/Controllers/Admin中创建IndexController.php

<?php
namespace App\Http\Controllers\Admin;//注意命名空间
use App\Http\Controllers\Controller;
class IndexController extends Controller
{
    public function index()
    {
        $data[]=array("title"=>"我是后台","body"=>"我是后台的第一个程序");
        return view('admin.index.welcome',['data'=>$data]);
    }
    public function test()
    {
        echo "测试";
    }
}

2.在模板中显示变量

@foreach($data as $k=>$v)
    {{$v['title']}}
    {{$v['body']}}
@endforeach

3.配置路由信息路由配置的路径为 routes/web.php。 响应方式分为:Route::get、Route::post、Route::put、Route::patch、Route::delete、Route::options以及match、any 其中march可以定义请求的方式,any是包含任何请求方式。

<?php
    //默认控制器
    Route::get('/', 'Home\IndexController@index');
    //后台
    Route::group(['prefix' => 'admin','namespace' => 'Admin','middleware' => ['web']], function()
    {
    $arr=[
        //格式为  "控制器"=>['方法1','方法2',....],
        "Index"=>['index','test'],
    ];
    foreach($arr as $k=>$v)
    {
        Route::any("/", ['as' => $k, 'uses' => 'IndexController@'.$k]);
        foreach($v as $key=>$val)
        {
            Route::any("/".$val, ['as' => $val, 'uses' => 'IndexController@'.$val]);
        }
        }
    });
    //前台
    Route::group(['prefix' => 'home','namespace' => 'Home','middleware' => ['web']], function()
    {
    $arr=[
        "Index"=>['index'],
    ];
    foreach($arr as $k=>$v)
    {
        Route::any("/", ['as' => $k, 'uses' => 'IndexController@'.$k]);
        foreach($v as $key=>$val)
        {
            Route::any("/".$val, ['as' => $val, 'uses' => 'IndexController@'.$val]);
        }
    }
    });

PS:前端分组与后端创建相似

4. 在浏览器上访问www.newlaravel.com/admin 就可以访问后台   www.newlaravel.com就可以访问前端


打赏本站,你说多少就多少

精彩评论

微信关注

Copyright © 2013-2019 千奇博客 保留所有权利 辽ICP备13008238号