protected $defer = true;

·PHP 语言官方网站:http://php.net/

那么问题来了,究竟应该选用哪种?

这个确实是,我们还没建立这个文件呢。建立一个空文件即可,如果是用generator建的话,别忘了把里面默认的内容删掉哦。再刷新页面,如果还有问题,我相信这个问题你可以自己解决。

这是一份面向初学者的 Laravel 5.1 中构建 Service Provider 的教程。

·Laravel 程序的基本文件结构;

这两种是绑定控制器的路由,控制器类BlogController下有两个函数,index和showPost,可以调用。

php artisan serve
@extends('layouts.master')

@section('content')
<h1>Demo Page</h1>
@endsection

Artisan 是 Laravel 内建的命令行工具,它提供了一些有用的命令协助您开发,它是由强大的 Symfony
Console 组件所驱动。

我们修改MyController类,同时再创建一个视图。

这就是视图文件,MVC中的V。视图需要仔细讲一下。

还包括 use 申明:

如果你还没安装 PHP,请访问http://php.net/,先安装PHP。

class MyController extends Controller
{
    public function hello()
    {
        return View('myview',['d1'=>'a1']);
    }
}
Route::get('admin/logout', array('as' => 'admin.logout', 'uses' => 'App\Controllers\Admin\AuthController@getLogout'));
Route::get('admin/login', array('as' => 'admin.login', 'uses' => 'App\Controllers\Admin\AuthController@getLogin'));
Route::post('admin/login', array('as' => 'admin.login.post', 'uses' => 'App\Controllers\Admin\AuthController@postLogin'));
Route::group(array('prefix' => 'admin', 'before' => 'auth.admin'), function()
{
    Route::any('/', 'App\Controllers\Admin\PagesController@index');
    Route::resource('articles', 'App\Controllers\Admin\ArticlesController');
    Route::resource('pages', 'App\Controllers\Admin\PagesController');
});
<?php

namespace app\Helpers;

use App\Helpers\Contracts\RocketShipContract;

class RocketLauncher implements RocketShipContract
{

    public function blastOff()
    {

        return 'Houston, we have launched!';

    }

}

1、显示“Hello, Laravel!”

php artisan make:controller MyController

因为他们都已经在 learnlaravel 这个 composer
应用的配置文件中声明为自动加载了,而他们没有在顶部声明他们所在的命名空间,这样就会被自动加为顶级命名空间。这个配置文件是
composer.json,对象配置项为autoload 下的classmap 项。这个声明会让
Composer
在生成自动载入文件的时候,自动扫描该文件下所有的类以及所有子文件夹中的类,只要没有声明特定的命名空间,将会被自动加载为顶级空间。【之前表述有误,特此更正!】

Route::resource('demo', 'DemoController');

在 index.blade.php 文件中添加

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row">
        <div class="col-md-10 col-md-offset-1">
            <div class="panel panel-default">
                <div class="panel-heading">{{ $d1 }}</div>

                <div class="panel-body">
                    this is my view!
                </div>
            </div>
        </div>
    </div>
</div>
@endsection
composer dump-autoload

我没有捐款按钮,但如果你愿意支持我的工作或学习更多 Laravel 的知识,你可以通过购买我的书来实现,《Laraboot:
laravel 5* For
Beginners》,非常感谢。

·MVC(模型,视图,控制器)和 REST 架构的基本原理;

然后,回到控制器目录,一份新的MyController.php文件被创建了,代码如下:

$this->call('SentrySeeder');

然后我们简单地调用 blastoff 方法并把它赋值给一个要传递向视图的变量。让我们来修改一下视图:

1、安装 Laravel

 

php artisan generate:controller admin/AuthController

你可以看到我们正在使用绑定方法来将契约和具体类绑定到一起。这是就是Service
Provider定义具体类方法的地方。所以你可以很便捷地调整你想要绑定的类。之后我们会看到这如何起效。

要想停止服务器,请在命令行中按 Ctrl+C 键。服务器成功停止后回重新看到命令行提示符。在大多数类 Unix 系统中,包括 Mac
OS X,命令行提示符是 $ 符号。

控制器文件夹地址在Laravel文件夹下\app\Http\Controllers,我们继续使用artisan控制台创建一个新控制器

注意看第25行“@yield(‘main’)”,这表示什么呢?这个有点复杂,我们稍后再讲。

Laravel 框架拥有完善的文档,你可以在这里阅读更多关于 Laravel Service
Provider 的内容。

l创建视图:

这里的{{ $d1
}}希望用一个变量的值来代替,所以,我们把MyController控制器修改为

<?php
namespace App\Controllers\Admin;
use Auth, BaseController, Form, Input, Redirect, Sentry, View;
class AuthController extends BaseController {
  /**
   * 显示登录页面
   * @return View
   */
  public function getLogin()
  {
    return View::make('admin.auth.login');
  }
  /**
   * POST 登录验证
   * @return Redirect
   */
  public function postLogin()
  {
    $credentials = array(
      'email'    => Input::get('email'),
      'password' => Input::get('password')
    );
    try
    {
      $user = Sentry::authenticate($credentials, false);
      if ($user)
      {
        return Redirect::route('admin.pages.index');
      }
    }
    catch(\Exception $e)
    {
      return Redirect::route('admin.login')->withErrors(array('login' => $e->getMessage()));
    }
  }
  /**
   * 注销
   * @return Redirect
   */
  public function getLogout()
  {
    Sentry::logout();
    return Redirect::route('admin.login');
  }
}

最后,我们有 provides 方法:

$ php artisancontroller:make WelcomeController –only=index

你不可能把复杂的业务逻辑都写在一个匿名函数里,所以你要学会新建控制器。

再刷新,如果你看到以下页面,说明你成功了!

简单粗暴。我们有了命名空间,use 申明和 class 申明。当你创建Service
Provider时,你要导入(import)具体类,像这里我在 use 申明中导入了 RocketShip。

New Article

再次刷新http://localhost:8000/articles/create,
可以看到页面中显示了一个标头。现在路由、控制器、动作和视图都能正常运行了。接下来要编写新建文章的表单了。

2、首个表单

要在模板中编写表单,可以使用“表单构造器”。Laravel 中常用的表单构造器是Form。在 app/views/articles/create.blade.php 文件中加入以下代码:

现在刷新页面,会看到上述代码生成的表单。在 Laravel 中编写表单就是这么简单!

在 Form 方法的块中,Form::text 创建了两个标签和两个文本字段,一个用于文章标题,一个用于文章内容。最后,Form::submit 创建一个提交按钮。

修改 app/views/articles/create.blade.php 文件中的 Form::open,改成这样:

{{Form::open(array(‘url’ => ‘articles’)) }}

这里,我们把 url 参数的值设为 articles 。对应的地址是 /articels,默认情况下,这个表单会向这个路由发起 POST 请求。这个路由对应于 ArticlesController 控制器的 store 动作。

表单写好了,路由也定义了,现在可以填写表单,然后点击提交按钮新建文章了。

3、创建文章

提交表单,会看到一个白屏。现在暂且不管这个错误。store 动作的作用是把新文章保存到数据库中。

提交表单后,其中的字段以参数的形式传递给 Laravel。这些参数可以在控制器的动作中使用,完成指定的操作。要想查看这些参数的内容,可以把 store 动作改成:

public functionstore()

{

dd(Input::all());

}

dd 函数为 Laravel 内置的打印输出函数,Input::all() 取得所有发出请求时传入的输入数据。

如果现在再次提交表单,不会再看到白屏错误,而是会看到类似下面的文字:

store 动作把表单提交的参数显示出来了。不过这么做没什么用,看到了参数又怎样,什么都没发生。

4、创建 Article 模型

在 Laravel 中,模型的名字使用单数,对应的数据表名使用复数。

创建 app/models/Article.php 并写入以下代码:

classArticleextendsEloquent {

}

注意我们并没有告诉 Eloquent
Article 模型会使用哪个数据库表。若没有特别指定,系统会默认自动对应名称为「类名称的小写复数形态」的数据库表。所以,在上面的例子中, Eloquent 会假设 Article 将把数据存在 articles 数据库表。

5、运行迁移

使用 Artisan CLI 的 migrate:make 命令建立迁移文件:

$ php artisanmigrate:make create_articles_table –create=articles

迁移文件会建立在 app/database/migrations 目录下,文件名会包含时间戳,用于在执行迁移时用来决定顺序。

app/database/migrations/20140903084339createarticlestable.php (你的迁移文件名可能有点不一样)文件的内容如下所示:

修改其中的创建代码为:

在这个迁移中定义了一个名为 up 的方法,在运行迁移时执行。up 方法中定义的操作都是可以通过 down 方法实现可逆的,Laravel 知道如何撤销这次迁移操作。运行迁移后,会创建 articles 表,以及一个字符串字段和文本字段。同时还会创建两个时间戳字段,用来跟踪记录的创建时间和更新时间。

然后,使用 Artisan 命令运行迁移:

$ php artisan migrate

Laravel 会执行迁移操作,告诉你创建了 articles 表。

Migration table created successfully. Migrated:
20140903084339createarticlestable

6、在控制器中保存数据

再回到 ArticlesController 控制器,我们要修改 store 动作,使用 Article 模型把数据保存到数据库中。打开 app/controllers/ArticlesController.php 文件,把 store 动作修改成这样:

同时在 app/models/Article.php 添加 :

protected$fillable =array(‘title’, ‘text’);

fillable 属性允许在动作中调用模型的 create 方法使用 title 和 text 属性。

再次访问http://localhost:8000/articles/create,填写表单,还差一步就能创建文章了。

7、显示文章

和前面一样,我们要在 app/controllers/ArticlesController.php 文件中更改 show 动作,以及相应的视图文件。

然后,新建 app/views/articles/show.blade.php 文件,写入下面的代码:

做了以上修改后,就能真正的新建文章了。访问http://localhost:8000/articles/create,自己试试。

8、列出所有文章

我们还要列出所有文章,对应的路由是:

GET|HEAD articles | articles.index | ArticlesController@index

在 app/controllers/ArticlesController.php 文件中,修改 ArticlesController 控制器 index 动作:

然后编写这个动作的视图,保存为 app/views/articles/index.blade.php:

现在访问http://localhost:8000/articles,会看到已经发布的文章列表。

9、添加链接

至此,我们可以新建、显示、列出文章了。下面我们添加一些链接,指向这些页面。

打开 app/views/welcome/index.blade.php 文件,添加:

{{link_to_route(‘articles.index’, ‘My Blog’) }}

linktoroute 是 Laravel 内置的视图帮助方法之一,根据提供的文本和地址创建超链接。这上面这段代码中,地址是文章列表页面。

接下来添加到其他页面的链接。先在 app/views/articles/index.blade.php 中添加“New
Article”链接,放在标签之前:

{{link_to_route(‘articles.create’, ‘New article’) }}

点击这个链接后,会转向新建文章的表单页面。

然后在 app/views/articles/create.blade.php 中添加一个链接,位于表单下面,返回到 index 动作:

{{link_to_route(‘articles.index’, ‘Back’) }}

最后,在 app/views/articles/show.blade.php 模板中添加一个链接,返回 index 动作,这样用户查看某篇文章后就可以返回文章列表页面了:

{{link_to_route(‘articles.index’, ‘Back’) }}

10、添加数据验证

在 app/controllers/ArticlesController.php 文件中,修改 ArticlesController 控制器 store 动作:

然后修改 app/views/articles/create.blade.php 添加 :

再次访问http://localhost:8000/articles/create,尝试发布一篇没有标题的文章,会看到一个很有用的错误提示。

11、更新文章

我们已经说明了 CRUD 中的 CR 两种操作。下面进入 U 部分,更新文章。

首先,要在 ArticlesController 中更改 edit 动作:

视图中要添加一个类似新建文章的表单。新建 app/views/articles/edit.blade.php 文件,写入下面的代码:

这里的表单指向 update 动作

method: put ( patch
) 选项告诉 Laravel,提交这个表单时使用 PUT 方法发送请求。根据 REST 架构,更新资源时要使用 HTTP
PUT 方法。

然后,要在 app/controllers/ArticlesController.php 中更新 update 动作:

最后,我们想在文章列表页面,在每篇文章后面都加上一个链接,指向 edit 动作。打开 app/views/articles/index.blade.php 文件,在“Show”链接后面添加“Edit”链接:

我们还要在 app/views/articles/show.blade.php 模板的底部加上“Edit”链接:

{{link_to_route(‘articles.index’, ‘Back’) }} |{{
link_to_route(‘articles.edit’, ‘Edit’, $article->id) }}

12、使用局部视图去掉视图中的重复代码

下面使用局部视图去掉两个视图中的重复代码。

新建 app/views/notifications.blade.php 文件,写入以下代码:

下面来修改 app/views/articles/creat.blade.php 和 edit.blade.php 视图,使用新建的局部视图,把其中的上面代码全删掉,替换成:

@include(‘notifications’)

13、删除文章

现在介绍 CRUD 中的 D,从数据库中删除文章。按照 REST 架构的约定,删除文章的路由是:

DELETE articles/{articles} | articles.destroy |
ArticlesController@destroy

删除资源时使用 DELETE 请求。如果还使用 GET 请求,可以构建如下所示的恶意地址:

lookat this
cat!

删除资源使用 DELETE 方法,路由会把请求发往 app/controllers/ArticlesController.php 中的 destroy 动作。修改 destroy 动作:

想把记录从数据库删除,可以在模型对象上调用 destroy 方法。最后,在index动作的模板(app/views/articles/index.blade.php)中加上“Destroy”链接:

恭喜,现在你可以新建、显示、列出、更新、删除文章了,完成了Laravel的第一次实践,祝您早日适应ThinkSNS+的技术框架,更多内容,请访问www.thinksns.com

  

这说明你成功了!

图片 1

$ composer globalrequire”laravel/installer=~1.1″

如果这么写,就意味着一旦用户访问URL:laravel/public/mvc,路由就会交给MyController控制器的hello函数,hello函数返回myview视图,即返回myview.blade.php

'debug' => true,
Houston, we have ignition.

首先, 使用 Composer 全局下载并安装 Laravel/installer:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;

class MyController extends Controller
{
    //
}

1. 视图分离与嵌套

@extends('layouts.master')

@section('content')

    {{ $boom }}

@endsection

·PHP 5.4 及以上版本

路由文件地址在\app\Http\routes.php,我们来看两种不同的路由。

php artisan generate:view admin._layouts.default

这个例子中我们正在调用一个我已经在 layouts 文件夹中创建了的 master 页面master.blade.php。如果你的 master 用了另一个名字,那么这里你得替换掉。如果你没有 master 页面,那么就删掉第一行 extends 的全部内容,包括 @sectioin 申明。

·新建 Laravel 程序,如何连接数据库;

Route::get('/blog','BlogController@index');
Route::get('/post/{slug}','BlogController@showPost');

写到这里大家可能有个疑问,为什么示例代码里空行那么多?这一点就是个人经验了。blade引擎的所有标签都会在视图编译时用正则处理,引擎本身有一个问题,算不上bug,就是换行符会被处理掉,导致前后行和这一行都紧紧地挤在一起,在前端浏览器中“查看源代码”时,比较不清晰,前后加上空行可以解决这个问题。当然这可能是一个自动的“压缩”特性,不再深入讨论。

让我们看一下这一段:

$ composer create-project laravel/laravel your-project-name
–prefer-dist

一.添加新控制器

这就涉及到了另一个问题,Laravel中的autoload问题。Laravel基于命名空间,它只会自动加载所有顶级命名空间的类,就是说我们新增的这个控制器类不是在顶级命名空间下,所以就需要告诉Laravel,我这个类是存在的,怎么告诉它呢?运行

Author

发表评论

电子邮件地址不会被公开。 必填项已用*标注