Laravel教程 六:表单 Forms

JellyBool

JellyBool

laravel 5.2 之后请使用 laravelcollective/html 替换 illuminate/html. 出现问题先看评论。

在开始之前,我们把界面先美化一点点先:

首先到https://github.com/JellyBool/blog-css-js得到静态文件,然后分别修改下面三个文件:

1. app.blade.php

2. articles/index.blade.php

3. articles/show.blade.php

下面的视图代码的修改部分,如果你偷懒,你可以使用ctrl+c大法。

app.blade.php中:将原来@yield('content')的代码替换成下面的代码:

<body>

    <div class="container">

            <section class="content">

                <div class="pad group">

                    @yield('content')

                </div>

            </section>

        </div>

</body>

就是在外面多加了个div和一个section。

再引入这两个css文件:

<link rel='stylesheet' href="/css/bootstrap.min.css" type='text/css' media='all'/>

<link rel='stylesheet' href="/css/all.css" type='text/css' media='all'/>

一个是bootstrap,一个是自定义的。

articles/index.blade.php文件中,我们将每个$article放在<article>标签中:

@foreach($articles as $article)

<article class="format-image group">

    <h2 class="post-title pad">

        <a href="/articles/{{ $article->id }}"> {{ $article->title }}</a>

    </h2>

    <div class="post-inner">

        <div class="post-deco">

            <div class="hex hex-small">

                <div class="hex-inner"><i class="fa"></i></div>

                <div class="corner-1"></div>

                <div class="corner-2"></div>

            </div>

        </div>

        <div class="post-content pad">

            <div class="entry custome">

                {{ $article->intro }}

            </div>

            <a class="more-link-custom" href="/articles/{{ $article->id }}"><span><i>更多</i></span></a>

        </div>

    </div>

</article>

@endforeach

然后最后就是修改articles/show.blade.php视图文件了:

@section('content')

    <article class="format-image group">

        <h2 class="post-title pad">

            <a href="/articles/{{ $article->id }}" rel="bookmark"> {{ $article->title }}</a>

        </h2>

        <div class="post-inner">

            <div class="post-content pad">

                <div class="entry custome">

                    {{ $article->content }}

                </div>

            </div>

        </div>

    </article>

@endsection

最后看看效果:

替代文字

教程的最后,基本上就可以完成一个跟本人的blog一样的小产品。

OK,稍微美化完过后,我们就可以进入我们的主题了:在Laravel中使用Forms表单。

前奏

既然我们需要创建一篇文章,我们首先还是需要将这个创建文章的页面展示出来吧,就像SF的文章撰写页面一样:http://segmentfault.com/write

所以我们需要将上一篇的内容走一遍:

注册路由,在routes.php中增加:

Route::get('article/create','ArticleController@create');

我们指定article/create来加载ArticleControllercreate()方法,然后我们在ArticleController创建之:

 public function create()

    {

        return view('articles.create');

    }

这个create()方法直接加载我们的create.blade.php,所以我们创建这个视图文件,来到之前的views/articles/这个文件夹中,新建create.blade.php,写上这些测试内容:

@extends('app')

@section('content')

    <h1>撰写新文章</h1>

@endsection

浏览器访问试试http://blog.dev/article/create

替代文字

一切正确加载之后,我们就开始着手我们的Forms使用了,因为创建文章的时候就是需要表单的提交,我们才可以将内容接收到,或者说几乎每一个web应用都离不开表单,哪怕是一个注册,登录页面,也都是需要表单的存在,只要你需要收集用户的信息或者希望有一些UGC,也离不开表单。所以我们开始使用Laravel的Forms表单吧。

使用illuminate/html

这里我们使用一个官方的Package:https://github.com/illuminate/html

我们通过composer来安装之:

composer require illuminate/html

静待一会,安装成功之后,我们们怎么告诉Laravel,这个Package已经安装了?或者说我们怎么将这个Package跟Laravel的整个体系结合起来呢?

通过提供Service Provider和指定Facade!这样就可以很完美地与Laravel结合了。

为什么直接叫Service Provider和Facade?因为我知道怎么翻译这两个才贴切,意会一下

在这里顺便多说一点:在PHP的很多composer的package中,都会有各个框架的不同版本,比如说HtmlPurifier这个过滤html和预防xss的package,就有这个Laravel的版本:
https://github.com/mewebstudio/Purifier ,或多或少,一些很好的package都会有Laravel的版本。

配置

那么说回Service Provider和Facade,刚开始可能对Service Provider的概念可能很迷惑,不过你现在完全不必要担心,尽管打开config/app.php这个文件看一看:

'providers' => [

            Illuminate\Foundation\Providers\ArtisanServiceProvider::class,

            Illuminate\Auth\AuthServiceProvider::class,

            Illuminate\Broadcasting\BroadcastServiceProvider::class,

            //...

            ]

你会看到providers这个数组里面会有一堆Laravel预置的Service Provider,比如我们经常使用到得Auth,Controller等,都可以在这里找到。如果你再往下拉,你还会看到一个这样的aliases数组:

'aliases' => [

    'App'       => Illuminate\Support\Facades\App::class,

    'Artisan'   => Illuminate\Support\Facades\Artisan::class,

    'Auth'      => Illuminate\Support\Facades\Auth::class,

    //...

    ]

aliases其实就是快捷方式了,一旦在这里指定了快捷方式,我们就可以在Laravel中全局使用,比如我在代码中使用Auth,其实背后我就是在用Illuminate\Support\Facades\Auth::class,然后再深入,我们其实是在用providers中的Illuminate\Auth\AuthServiceProvider::class这个。

趁上面写这些的时候illuminate/html已经下载好了:

替代文字

那么,按照上面方式,我们来配置一下我们的illuminate/html,在config/app.php中的providers添加我们的Service Provider:

Illuminate\Html\HtmlServiceProvider::class,

配置完大概长这样:

替代文字

OK,Service Provider添加好了之后,我们来添加我们的Facade,也就是在aliases这个数值后面添加:

'Form'      => Illuminate\Html\FormFacade::class,

配置完之后看看图片长这样:

替代文字

使用Forms

这两个配置好了之后,我们就可以在在我们的create.blade.php这个视图中使用它了:

@section('content')

    <h1>撰写新文章</h1>

    {!! Form::open() !!}

    {!! Form::close() !!}

@endsection

我们加入了两行{!! Form::open() !!}{!! Form::close() !!},至于{!!类似的符号,请类比如blade的{{,不用太纠结这个。我们再来访问http://blog.dev/article/create试试:

咋一看,貌似没有什么变化,但是你要查看页面源码或者使用开发者工具检查元素的时候,就可以发现这个form元素已经创建出来了。

替代文字

不难发现,Laravel的Form还默认为我们生成一个hidden的表单(name="_token"),这个是Laravel默认对表单提交的一点安全支持。在表单提交的时候,Laravel会自动检查这个_token是否与保存在session中的_token一致,如果不一致,那就直接跳转回远页面,不允许我们提交数据。

既然Form可以正常使用了,我们就可以创建我们需要的表单了:

{!! Form::open() !!}

   <div class="form-group">

       {!! Form::label('title','标题:') !!}

       {!! Form::text('title',null,['class'=>'form-control']) !!}

   </div>

   <div class="form-group">

       {!! Form::label('content','正文:') !!}

       {!! Form::textarea('content',null,['class'=>'form-control']) !!}

   </div>

   <div class="form-group">

       {!! Form::submit('发表文章',['class'=>'btn btn-success form-control']) !!}

   </div>

{!! Form::close() !!}

我们在{!! Form::open() !!}加入一点东西,先来看看我们的效果:

替代文字

下面详细解释一下:

{!! Form::text('title',null,['class'=>'form-control']) !!}

拿这个来开刀吧:

  1. Form::text 表示<input type='text' />,还要一堆比如 <input type='password' />等你可以参照着写。

  2. 'title' 表示 name='title'

  3. null 表示 value=''

  4. 'class'=>'form-control' 表示class='form-control',这里可以指定idplaceholder等一系列你想指定的属性

然而在Form::open()没有指定提交路径的情况之下,默认是提交到本页面,这样对于我们的清晰分工是不太好的,因为这个页面就是用来加载视图的,而对于我们表单提交的内容,我们希望用另外的方法来处理,所以我们来写一写吧。

首先在Form::open()指定表单提交的url,直接在加入url:

{!! Form::open(['url'=>'article/store']) !!}

我们指定表单post提交到article/store这个地址,然后在routes.php注册这个路由地址:

Route::post('article/store','ArticleController@store');

这里注意我们使用了Route::post而不是Route::get,这是用来接收post的路由。然后顺利成章,在ArticleController中创建store()方法:

public function store()

    {

        $input = Request::all();

        return $input;

    }

在这个方法中,我们引入Laravel自带的Request并使用Request::all(),来获取所有的用户提交的过来的内容(这里指的是:_token,namecontent),如果你想获取具体某一个表单输入的内容,可以使用Request::get(),比如Request::get('title'),然后直接return来看看用户到底输入了什么内容,我们来试试:

替代文字

实现创建新文章

OK,成功拿到用户的提交的内容之后,我们需要将这些保存到数据库,怎么实现呢?在第四篇中,我们提到的Eloquentcreate()方法现在就可以派上用场了,于是我们可以写成这样:

Article::create($input);

Laravel会自动过滤_token这个提交内容。

但是创建完一篇文章之后,我们并不是想return $input,而是想重新跳转到某个页面中,比如我们的首页,因为发表完文章,我们需要看到它是否成功出线在文章列表中,所以我们最后写一下:

public function store()

    {

        $input = Request::all();

        Article::create($input);

        return redirect('/');

    }

我们直接使用Laravel的redirect()函数进行跳转,跳转到首页。这个时候,短短的三行代码就可以将我们的逻辑实现了,那么我们来试试:

替代文字

貌似成功了?但是我们觉得这个排序有点问题,最新创建的文章当然是在最上面的了,所以我们到ArticleControllerindex()方法中稍微修改一下:

public function index()

    {

        $articles = Article::latest()->get();

        return view('articles.index',compact('articles'));

    }

将原来的all()换成了latest()->get(),刷新,

替代文字
我们发现,最新的文章intro竟然空白,我们到数据库看看:
替代文字

我们发现,刚刚创建的文章的intro为空值,而published_at0000-00-00 00:00:00,这不是我们想要的,为什么会这样呢?因为我们在提交过来的时候,并没有这两个数据啊,为了解决这个问题,首先我们可以很暴力得将这两个数据在使用Article::create($input)之前配置好,比如:

public function store()

    {

        $input = Request::all();

        //下面增加两行,顺便看看Request::get的使用

        $input['intro'] = mb_substr(Request::get('content'),0,64);

        $input['published_at'] = Carbon::now();

        Article::create($input);

        return redirect('/');

    }

intro字段就直接取content字段的头64个,然后published_at就默认为创建的时间。目前开起来代码有点暴力,但是不失为一种解决方案,我们后续会使代码much cleaner。我们再来试试:

替代文字

bang,成功了,我们在看看数据库:

替代文字

到这里,我们创建一篇文章的基本流程就完成了,但是这里还有一个问题,如果你尝试在文章创建的页面什么都不填,直接提交数据,你看看会发生什么,如果不确定,你可以看看你的数据库,到底发生了什么。

下一节

鉴于最后的问题和牵涉到表单的内容,下一节貌似很顺理成章就应该说说表单验证了,在Laravel中就是Request Validation。

最后,

Happy Hacking

本文由 JellyBool 创作, 转载和引用遵循 署名-非商业性使用 2.5 中国大陆 进行许可。

共有 193 条评论

openwrtmail

hi,@jelly 又遇到一个问题,在写store方法时,用$input = Request::all(); 获取请求数据,结果报错Non-static method Illuminate\Http\Request::all() should not be called statically, assuming $this from incompatible context
我查了一下Illuminate\Http\Request这个类,里面的all方法的确不是静态的,但是我在laravel的手册上看到的也是这样获取的,如下:

取得所有发出请求时传入的输入数据

$input = Request::all();

openwrtmail

解决了。多谢。原因是创建ArticleController时自动引入了两个命名空间;

use Illuminate\Http\Request;
use App\Http\Requests;
需要删掉这两个;直接引入下面的命名空间
use Requests;

好几个错误都是命名空间引起的 感觉没明白命名空间

JellyBool

@openwrtmail 看来我的教材中需要指出一下,这个应该是现在文件前面使用

use Request;
lqooer 回复 JellyBool

我这样做了之后出现 Class App\Http\Controllers\Request does not exist

zhouwenbin 回复 JellyBool

Class ‘App\Http\Controllers\Request’ not found

JellyBool 回复 zhouwenbin

你先看看 OOP 的基础和概念会好很多

https://laravist.com/series/object-oriented-programming-in-php

zhouwenbin 回复 JellyBool

教程不错,就是有些缺漏的,看了评论再试才可以,建议把这几个加上去

use Request;
use Carbon\Carbon;
use App\Article;

还有5.2版本需要laravelcollective/html

ethanzyc

'Form' => Illuminate\Html\FormFacade::class,

中的 FormFacade是怎么确定的呢?@JellyBool

ethanzyc

建议文件尾部添加“下一节”的链接 否则还要到列表里找

JellyBool

@ethanzyc 这个是直接看文档来的。好的,建议我收下了

malayke

你好,楼主,laravel的这个模块illuminate/html在5.1中被移除,使用需要手动安装,那么问题来了,在5.1中为什么会被移除,是因为他不好吗?既然被移除了,那现在应该用什么比较好,而不是自己又装上,很喜欢你的博客和这个社区!

JellyBool

并没有说它不好,只是官方觉得laravel需要瘦一下身而已,我还是会推荐你好,楼主,laravel的这个模块illuminate/html,然后觉得不错的话,常来看看呗

JellyBool

@malayke 就像Auth被官方干掉一样,瘦身

malayke

明白了,以后会常来的,有问题问你,别觉得烦就行,哈哈~

JellyBool

恩恩,交流是很欢迎的 @malayke

xuan9230

@openwrtmail
should be
use Request;
instead of
use Requests;

A quick typo;)

JellyBool

you from ? @xuan9230

zhengmin4516

你好,我用的是5.0版本,这个版本的form该怎么创建,按照教程,安装了composer require illuminate/html , 配置了app.php,但是运行Class ‘Illuminate\Html\HtmlServiceProvider’ not found,这是为什么,谢谢

找到问题,要命令行进入laravel程序目录执行composer require illuminate/html,我直接就在根目录执行了,郁闷

zhengmin4516

会不会是要进入laravel目录执行composer命令呀,现在再安装,一直卡在Generating optimized class loader,然后电脑就变得超级卡,这又是为什么,谢谢

JellyBool

你不进入laravel项目目录,composer怎么知道你要装在illuminate/html在哪里,删掉配置从新装一次吧。顺便推荐开个vpn

JellyBool

@zhengmin4516 可以简单看看markdown语法,这样的评论好很多 @zhengmin4516

meow

出现了这些报错

MethodNotAllowedHttpException in RouteCollection.php line 219:
1. in RouteCollection.php line 219
2.at RouteCollection->methodNotAllowed(array('GET', 'HEAD')) in RouteCollection.php line 206
3.at RouteCollection->getRouteForMethods(object(Request), array('GET', 'HEAD')) in RouteCollection.php line 158
4.at RouteCollection->match(object(Request)) in Router.php line 746
5.at Router->findRoute(object(Request)) in Router.php line 655
6.at Router->dispatchToRoute(object(Request)) in Router.php line 631
7.at Router->dispatch(object(Request)) in Kernel.php line 236

JellyBool

有代码的地方请使用markdown。检查你的路由。 @meow

meow
    public function index()
    {
        // return view('articles.lists');
         $articles = Article::all();

        return view('articles.index',compact('articles'));

    }
    public function show($id)
    {
         $article = Article::findOrFail($id);

        return view('articles.show',compact('article'));
    }
    public function create()
    {
        return view('articles.create');
    }
    public function store()
    {
        $input = Request::all();
        $input['intro'] = mb_substr(Request::get('content'),0,64);
        $input['published_at'] = Carbon::now();
        Article::create($input);
        return redirect('/');
    }

路由部分和博主写的一样呀~~~
@JellyBool

JellyBool

路由贴出来看一下 @meow

meow

路由部分是这样~~~

Route::get('/','ArticleController@index');
Route::get('/articles/{id}','ArticleController@show');
Route::get('/article/create','ArticleController@create');
Route::post('/article/store','ArticleController@store');
JellyBool

其他页面都是好的么 @meow

meow

其它页面都正常,只有提交表单之后才会变成这样。@JellyBool

JellyBool

你早说是提交表单啊,大哥,Form::open()的url没写对。。。。 @meow

meow

唔,改对了之后,就成这样了

in Model.php line 424
at Model->fill(array('_token' => 'sF6AmCy0OS5VQIduPesBOHzM4qFLPF2sUYKOrJD1', 'title' => '喵,喵喵', 'content' => 'Laravel 5.1.11 版本正式发布!距上一次发布的 Laravel 5.1.4 版本(72 日发布)过去了将近两个月的时间。 其实我最想知道的是:中间那 6 个版本被谁吃了? ', 'intro' => 'Laravel 5.1.11 版本正式发布!距上一次发布的 Laravel 5.1.4 版本(72 日发布)过去了将近两个', 'published_at' => object(Carbon))) in Model.php line 278
at Model->__construct(array('_token' => 'sF6AmCy0OS5VQIduPesBOHzM4qFLPF2sUYKOrJD1', 'title' => '喵,喵喵', 'content' => 'Laravel 5.1.11 版本正式发布!距上一次发布的 Laravel 5.1.4 版本(72 日发布)过去了将近两个月的时间。 其实我最想知道的是:中间那 6 个版本被谁吃了? ', 'intro' => 'Laravel 5.1.11 版本正式发布!距上一次发布的 Laravel 5.1.4 版本(72 日发布)过去了将近两个', 'published_at' => object(Carbon))) in Model.php line 544
at Model::create(array('_token' => 'sF6AmCy0OS5VQIduPesBOHzM4qFLPF2sUYKOrJD1', 'title' => '喵,喵喵', 'content' => 'Laravel 5.1.11 版本正式发布!距上一次发布的 Laravel 5.1.4 版本(72 日发布)过去了将近两个月的时间。 其实我最想知道的是:中间那 6 个版本被谁吃了? ', 'intro' => 'Laravel 5.1.11 版本正式发布!距上一次发布的 Laravel 5.1.4 版本(72 日发布)过去了将近两个', 'published_at' => object(Carbon))) in ArticleController.php line 39
at ArticleController->store()
at call_user_func_array(array(object(ArticleController), 'store'), array()) in Controller.php line 256
at Controller->callAction('store', array()) in ControllerDispatcher.php line 164
at ControllerDispatcher->call(object(ArticleController), object(Route), 'store') in ControllerDispatcher.php line 112
at ControllerDispatcher->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 139
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103
at Pipeline->then(object(Closure)) in ControllerDispatcher.php line 114
at ControllerDispatcher->callWithinStack(object(ArticleController), object(Route), object(Request), 'store') in ControllerDispatcher.php line 69
at ControllerDispatcher->dispatch(object(Route), object(Request), 'App\Http\Controllers\ArticleController', 'store') in Route.php line 201
at Route->runWithCustomDispatcher(object(Request)) in Route.php line 134
at Route->run(object(Request)) in Router.php line 704
at Router->Illuminate\Routing\{closure}(object(Request))


加了

use Carbon\Carbon;

如果不加这个会提示找不到Carbon
@JellyBool

JellyBool

你看了前面的文章没有? 能不能将完整地错误给我 @meow

meow

是一步一步跟着做的呦~~

in Model.php line 424
at Model->fill(array('_token' => 'sF6AmCy0OS5VQIduPesBOHzM4qFLPF2sUYKOrJD1', 'title' => '喵喵喵', 'content' => 'Laravel 5.1.11 版本正式发布!距上一次发布的 Laravel 5.1.4 版本(72 日发布)过去了将近两个月的时间。 其实我最想知道的是:中间那 6 个版本被谁吃了? ', 'intro' => 'Laravel 5.1.11 版本正式发布!距上一次发布的 Laravel 5.1.4 版本(72 日发布)过去了将近两个', 'published_at' => object(Carbon))) in Model.php line 278
at Model->__construct(array('_token' => 'sF6AmCy0OS5VQIduPesBOHzM4qFLPF2sUYKOrJD1', 'title' => '喵喵喵', 'content' => 'Laravel 5.1.11 版本正式发布!距上一次发布的 Laravel 5.1.4 版本(72 日发布)过去了将近两个月的时间。 其实我最想知道的是:中间那 6 个版本被谁吃了? ', 'intro' => 'Laravel 5.1.11 版本正式发布!距上一次发布的 Laravel 5.1.4 版本(72 日发布)过去了将近两个', 'published_at' => object(Carbon))) in Model.php line 544
at Model::create(array('_token' => 'sF6AmCy0OS5VQIduPesBOHzM4qFLPF2sUYKOrJD1', 'title' => '喵喵喵', 'content' => 'Laravel 5.1.11 版本正式发布!距上一次发布的 Laravel 5.1.4 版本(72 日发布)过去了将近两个月的时间。 其实我最想知道的是:中间那 6 个版本被谁吃了? ', 'intro' => 'Laravel 5.1.11 版本正式发布!距上一次发布的 Laravel 5.1.4 版本(72 日发布)过去了将近两个', 'published_at' => object(Carbon))) in ArticleController.php line 39
at ArticleController->store()
at call_user_func_array(array(object(ArticleController), 'store'), array()) in Controller.php line 256
at Controller->callAction('store', array()) in ControllerDispatcher.php line 164
at ControllerDispatcher->call(object(ArticleController), object(Route), 'store') in ControllerDispatcher.php line 112
at ControllerDispatcher->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 139
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103
at Pipeline->then(object(Closure)) in ControllerDispatcher.php line 114
at ControllerDispatcher->callWithinStack(object(ArticleController), object(Route), object(Request), 'store') in ControllerDispatcher.php line 69
at ControllerDispatcher->dispatch(object(Route), object(Request), 'App\Http\Controllers\ArticleController', 'store') in Route.php line 201
at Route->runWithCustomDispatcher(object(Request)) in Route.php line 134
at Route->run(object(Request)) in Router.php line 704
at Router->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 139
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103
at Pipeline->then(object(Closure)) in Router.php line 706
at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 671
at Router->dispatchToRoute(object(Request)) in Router.php line 631
at Router->dispatch(object(Request)) in Kernel.php line 236
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 139
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in VerifyCsrfToken.php line 50
at VerifyCsrfToken->handle(object(Request), object(Closure))
at call_user_func_array(array(object(VerifyCsrfToken), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in ShareErrorsFromSession.php line 49
at ShareErrorsFromSession->handle(object(Request), object(Closure))
at call_user_func_array(array(object(ShareErrorsFromSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in StartSession.php line 62
at StartSession->handle(object(Request), object(Closure))
at call_user_func_array(array(object(StartSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 37
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure))
at call_user_func_array(array(object(AddQueuedCookiesToResponse), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in EncryptCookies.php line 59
at EncryptCookies->handle(object(Request), object(Closure))
at call_user_func_array(array(object(EncryptCookies), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in CheckForMaintenanceMode.php line 42
at CheckForMaintenanceMode->handle(object(Request), object(Closure))
at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103
at Pipeline->then(object(Closure)) in Kernel.php line 122
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 87
at Kernel->handle(object(Request)) in index.php line 54
at require_once('D:\laravel\b\public\index.php') in server.php line 21

喵~~~~

JellyBool

@meow 这就是所有的报错信息 ?

meow

对哒,一共51行·

JellyBool

额,那我不知道了 @meow

meow

好的吧,还是谢谢博主大大~~~~

meow

@JellyBool 重新做了一下,这次开启了Apache,改Sqlite为MySql,然后奇迹般的好了

JellyBool

额,所以得好好问问题。。。如果你早说你用的Sqlite,我就知道了。。。 @meow

meow

喵,Sqlite不能和MySql一样吗?

JellyBool

额,那算了吧,你自己玩得开心 @meow

meow

(´・ω・) 好的吧~~~~~~喵~~~~ ๑´•.̫ •

woailuosj

Laravel会自动过滤_token这个提交内容,

MassAssignmentException in Model.php line 424:
_token
in Model.php line 424

我也出了这个错误。。。是Mysql

woailuosj
Whoops, looks like something went wrong.

1/1
MassAssignmentException in Model.php line 424:
_token
in Model.php line 424
at Model->fill(array('_token' => 'AJHt3TwGtm5enrnq2jS8hjbivvuyfyVVao8Ah7aI', 'title' => 'AT&TVoWiFi 许可,其用户已可通过无线网络拨打电话', 'content' => '我们知道美国智能手机销售比较依赖运营商渠道,而几家运营商之间竞争一直比较激烈,比如前段时间 iPhone 6s 发布后,T-Mobile、Sprint、AT&T 和 Verizon争相推出优惠打价格战。 基于网络的通话服务也是运营商必争之地,目前主流的模式分为两种:VoLTE 和 VoWiFi,分别利用数据网络和 WiFi 网络拨打电话,可以弥补电话信号不足的问题。VoWiFi 服务使用户在连接家庭、公司、图书馆内的任意 WiFi 后,即使不连接蜂窝网络也能进行通话,并且不需要安装任何第三方 app,此前 T-Mobile 和 Sprint 都已开展了这项业务。 据外媒消息,美国联邦通信委员会(FCC)目前已经通过了 AT&T 的请求,允许其提供支持 TTY 文本格式的移动电话服务,这意味着 AT&T 可以正式提供 VoWiFi 服务。目前该功能可支持运行 iOS 9 的 iPhone 6/6 Plus/6s/6s Plus 四款手机,只要手机在 WiFi 连接之下,用户便可在信号较差时选择用 WiFi 网络通话,并在美国、波多黎各和美属维京群岛免费提供。', 'intro' => '我们知道美国智能手机销售比较依赖运营商渠道,而几家运营商之间竞争一直比较激烈,比如前段时间 iPhone 6s 发布后,T-Mo', 'published_at' => object(Carbon))) in Model.php line 278
at Model->__construct(array('_token' => 'AJHt3TwGtm5enrnq2jS8hjbivvuyfyVVao8Ah7aI', 'title' => 'AT&TVoWiFi 许可,其用户已可通过无线网络拨打电话', 'content' => '我们知道美国智能手机销售比较依赖运营商渠道,而几家运营商之间竞争一直比较激烈,比如前段时间 iPhone 6s 发布后,T-Mobile、Sprint、AT&T 和 Verizon争相推出优惠打价格战。 基于网络的通话服务也是运营商必争之地,目前主流的模式分为两种:VoLTE 和 VoWiFi,分别利用数据网络和 WiFi 网络拨打电话,可以弥补电话信号不足的问题。VoWiFi 服务使用户在连接家庭、公司、图书馆内的任意 WiFi 后,即使不连接蜂窝网络也能进行通话,并且不需要安装任何第三方 app,此前 T-Mobile 和 Sprint 都已开展了这项业务。 据外媒消息,美国联邦通信委员会(FCC)目前已经通过了 AT&T 的请求,允许其提供支持 TTY 文本格式的移动电话服务,这意味着 AT&T 可以正式提供 VoWiFi 服务。目前该功能可支持运行 iOS 9 的 iPhone 6/6 Plus/6s/6s Plus 四款手机,只要手机在 WiFi 连接之下,用户便可在信号较差时选择用 WiFi 网络通话,并在美国、波多黎各和美属维京群岛免费提供。', 'intro' => '我们知道美国智能手机销售比较依赖运营商渠道,而几家运营商之间竞争一直比较激烈,比如前段时间 iPhone 6s 发布后,T-Mo', 'published_at' => object(Carbon))) in Model.php line 544
at Model::create(array('_token' => 'AJHt3TwGtm5enrnq2jS8hjbivvuyfyVVao8Ah7aI', 'title' => 'AT&TVoWiFi 许可,其用户已可通过无线网络拨打电话', 'content' => '我们知道美国智能手机销售比较依赖运营商渠道,而几家运营商之间竞争一直比较激烈,比如前段时间 iPhone 6s 发布后,T-Mobile、Sprint、AT&T 和 Verizon争相推出优惠打价格战。 基于网络的通话服务也是运营商必争之地,目前主流的模式分为两种:VoLTE 和 VoWiFi,分别利用数据网络和 WiFi 网络拨打电话,可以弥补电话信号不足的问题。VoWiFi 服务使用户在连接家庭、公司、图书馆内的任意 WiFi 后,即使不连接蜂窝网络也能进行通话,并且不需要安装任何第三方 app,此前 T-Mobile 和 Sprint 都已开展了这项业务。 据外媒消息,美国联邦通信委员会(FCC)目前已经通过了 AT&T 的请求,允许其提供支持 TTY 文本格式的移动电话服务,这意味着 AT&T 可以正式提供 VoWiFi 服务。目前该功能可支持运行 iOS 9 的 iPhone 6/6 Plus/6s/6s Plus 四款手机,只要手机在 WiFi 连接之下,用户便可在信号较差时选择用 WiFi 网络通话,并在美国、波多黎各和美属维京群岛免费提供。', 'intro' => '我们知道美国智能手机销售比较依赖运营商渠道,而几家运营商之间竞争一直比较激烈,比如前段时间 iPhone 6s 发布后,T-Mo', 'published_at' => object(Carbon))) in ArticleController.php line 41
at ArticleController->create()
at call_user_func_array(array(object(ArticleController), 'create'), array()) in Controller.php line 256
at Controller->callAction('create', array()) in ControllerDispatcher.php line 164
at ControllerDispatcher->call(object(ArticleController), object(Route), 'create') in ControllerDispatcher.php line 112
at ControllerDispatcher->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 139
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103
at Pipeline->then(object(Closure)) in ControllerDispatcher.php line 114
at ControllerDispatcher->callWithinStack(object(ArticleController), object(Route), object(Request), 'create') in ControllerDispatcher.php line 69
at ControllerDispatcher->dispatch(object(Route), object(Request), 'App\Http\Controllers\ArticleController', 'create') in Route.php line 201
at Route->runWithCustomDispatcher(object(Request)) in Route.php line 134
at Route->run(object(Request)) in Router.php line 704
at Router->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 139
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103
at Pipeline->then(object(Closure)) in Router.php line 706
at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 671
at Router->dispatchToRoute(object(Request)) in Router.php line 631
at Router->dispatch(object(Request)) in Kernel.php line 236
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 139
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in VerifyCsrfToken.php line 50
at VerifyCsrfToken->handle(object(Request), object(Closure))
at call_user_func_array(array(object(VerifyCsrfToken), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in ShareErrorsFromSession.php line 49
at ShareErrorsFromSession->handle(object(Request), object(Closure))
at call_user_func_array(array(object(ShareErrorsFromSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in StartSession.php line 62
at StartSession->handle(object(Request), object(Closure))
at call_user_func_array(array(object(StartSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 37
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure))
at call_user_func_array(array(object(AddQueuedCookiesToResponse), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in EncryptCookies.php line 59
at EncryptCookies->handle(object(Request), object(Closure))
at call_user_func_array(array(object(EncryptCookies), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in CheckForMaintenanceMode.php line 42
at CheckForMaintenanceMode->handle(object(Request), object(Closure))
at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103
at Pipeline->then(object(Closure)) in Kernel.php line 122
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 87
at Kernel->handle(object(Request)) in index.php line 54
at require_once('/Users/DingThink/ime/dev/phppro/blog-laravel5.1/blog/public/index.php') in server.php line 21
JellyBool

@woailuosj https://laravist.com/series/laravel-5-basic/episodes/7

看看这个,设置你的fillable

woailuosj

恩,明白了,好了,谢谢

openwrtmail

just try it .
@xuan9230

taruca

博主,你好。为什么我用
$article=App\Article::create(['title'=>'3','content'=>'2','published_at'=>Carbon\Carbon::now()]);
命令时,无法将titlecontent存入数据库,而published_at却可以。具体如下:

App\Article {#690
     published_at: Carbon\Carbon {#689
       +"date": "2015-10-11 14:46:10",
       +"timezone_type": 3,
       +"timezone": "UTC",
     },
     updated_at: "2015-10-11 14:46:10",
     created_at: "2015-10-11 14:46:10",
     id: 1,
   }

我用的是MySQL数据库。
@JellyBool

JellyBool

第一,检查你的fillable
第二,检查你的验证规则 @taruca

taruca

谢谢博主,是fillable有问题。
@JellyBool

simond

路由这样写,当我article/create的时候找不到页面,

Route::get('article/{id}','ArticleController@show');
Route::get('article/create','ArticleController@create');

但是顺序改一下就可以,路由先识别判断的id?

Route::get('article/create','ArticleController@create');
Route::get('article/{id}','ArticleController@show');

我的show方法这么写的:

public function show($id)
    {
        $article=  Articles::findOrFail($id);(是否直接就抛出错误,不继续下一个路由了?)
        return view("articles.show",  compact("article"));
    }
fyzzy1943

@JellyBool ,直接use Request 是use的哪个呀。

fyzzy1943

@JellyBool ,不换命名空间的话,可以这么用,看起来是一样的。
function t1(Request $request)
{
// request=Request::all();vardump(request=Request::all(); var_dump(request->all());
}

dudushuang

composer require illuminate/html 在执行到这里的时候报错了

update-self也无用

dudushuang

我的这里是这样

lms3344wjx

@JellyBool
下载的时候出现了Token(hidden):
这该怎么解决啊?

jwwb681232a

创建文章的时候
路由:

Route::get('/articles/{id}','ArticleController@show');
Route::get('/articles/create','ArticleController@create');

地址栏:http://localhost:8999/articles/create

问题:总是把create当成了articles的id;怎么解决呢?

JellyBool
Route::get('/articles/create','ArticleController@create');
Route::get('/articles/{id}','ArticleController@show');

这样写试试。@jwwb681232a

Smile

博主,那么问题来了~~~
博客评论是怎么实现markdown的呢?
==>存储在数据库中会是什么样子嘞,是解析成html了还是markdown语法呢?
谢谢博主喽 😃

HappyClub成长乐园

还是无法解决,请指教

见到你-很高兴

博主你的前端效果是自己设计的吗?

JellyBool

算是吧 @见到你-很高兴

xuan9230

支持!

dotasfans

博主,不好意思又来了!以上面提的问题为例,需要使用use Requests;就是要导入这个文件嘛!可是,这个文件我用ctrl+左键去找又找不到!只能理解为它在一个我不知道的库中。但是既然能用,显然应该是有的,那应该怎么去找呢!
最后,建议博主开一集视频讲讲命名空间以及从外面通过compose导入的类库如何查看源文件。

JellyBool

额。命名空间会讲,然后composer的话,有一个系列的视频都在讲 @dotasfans

dotasfans

好的,感谢博主大大!另外,还有一个问题也希望博主大大解释一下!就是一般laravel框架中自带源码的类,函数都是直接可用ctrl连接到的,可是有些函数,类却找不到。该怎么看这个问题呢!@JellyBool

hhzx

我实在解决不了…为什么我的就没有token值呢…

高启松

是不是laravel5.1不能用这个啊

JellyBool

额。目前好像不建议用这个了 @高启松

heigh_高

MassAssignmentException in Model.php line 421: _token
总是提示这个错误,也是醉了,博主,求帮忙!

JellyBool

额。。没事去看看视频吧 @heigh_高

axhello

5.2用了这个会报错…在Stack Overflow上看了一下,推荐用这个laravelcollective/html

cxccxc

发现在我的laravel5.1中,调用Request::all()并不能自动过滤掉_token字段
需要手动过滤 $input = array_except(Request::all(),[’_token’]);

qiandutianxia

laravel5.0的版本用composer require “illuminate/html”: “^5.0"
laravel5.2的版本用composer require “laravelcollective/html”:”^5.2.0"

Anonymous

非常非常感谢!!!!我还纳闷是谁呢。。。。
拿来交阿里云的水电费了。

再次感谢,你是第一个。。。

Anonymous

我也是刚刚看楼上的那句话Talk is cheap.Show me the moeny.,我纳闷呢,在哪呢。后来想到试试404页面~~~
最近也在看laracasts的《laravel-5-fundamentals》,毕竟是全英文,所以很多东西不是很理解,楼主blog一写,确实清晰了许多。

Anonymous

哈哈哈,这么666.。。laracasts上面的东西都太好了。。我最近在部署一个类似laracasts的站点,也想录点视频。

Anonymous

在结合Vue.js的时候有点小问题,很快估计就会出来了。。。哈哈哈

Anonymous

那必须支持!

Anonymous

希望楼主能将blog和学习的站点与社交结合起来,至少微博、微信分享,订阅推送做起来。很多时候大家不会从浏览器去输blog地址,如果能从微博 微信进入会方便很多

Anonymous

哈哈哈,到时候放出来就好了。。。希望是所有有关laravel的问题都可以在那个站点解决掉

Anonymous

现在你可以订阅撒,微博微信分享直接用的多说的。。。订阅在这里https://jellybool.com/rss

Anonymous

博主写得好,比网上其他教程都要清晰,并且是最新版5.1,期待更新下一节。ps:一共大约还有多少节?

Anonymous

顺便问一下,laravel用maria DB要怎么设置呢?

Anonymous

请教一个问题 在阿里云虚拟主机上部署laravel是不是很多问题,主要就是根路径问题,虚拟主机没法直接将域名绑定到public目录。只能靠.htaccess做重定向,路由没问题,但是引用CSS等资源时不对;请问有什么好的办法吗 ?我知道用VPS直接绑定域名到public可以解决.但是现在只有虚拟主机

Anonymous

谢谢,觉得好就常来看看呗,哈哈哈。现在大概出到一半吧。

Anonymous

这个应该是可以根据apach的配置来指定的吧。你说的云虚拟主机是指哪一种,貌似没试过。。。

Anonymous

正常地像设置mysql一样不行?理论上是可行的啊

Anonymous

如果是vps直接在apache建立虚拟站点。然后绑定域名;将根目录设置到public。但是虚拟主机没法设置虚拟站点 先不管了 在本地试了。

Anonymous

如果你也安装了illuminate/html,可以尝试使用这样{!! HTML::style(‘css/style.css’) !!}的语句试试,不过你首先需要这样配置一下:

在config/app.php里地aliases指定:‘HTML’ => Illuminate\Html\HtmlFacade::class,

Anonymous

多谢。我试试

Anonymous

嗯嗯嗯,你试试可以不

Anonymous

博主2天没更新了,赶快,这么好的文章,想一口气读完。每天写2节吧!

Anonymous

最近就是在忙着部署另一个站点,明天出文章吧。一天两节实在写不出

Anonymous

今天啥时候更新啊??

Anonymous

忙着部署这个站点了:https://laravist.com

Anonymous

https证书用的哪里提供的啊?

Anonymous

用的是startssl的。

Anonymous

用HTML类引用CSS也要加上/public.因为虚拟主机没法绑定到public目录

Anonymous

楼主我保存的时候一定要使用Request request,input = $request->all(); 按照你上面的方式Request::all()会报错误啊,怎么回事呢?

Anonymous

我想把一个页面的数组(抓取的数据,保存为数组),提交到控制器的store方法,存到数据库,要怎么提交啊?

Anonymous

你在文件头部使用use Request;引入Request类没有

Anonymous

我也碰到这个问题。

Anonymous

ErrorException in ArticleController.php line 41: Non-static method Illuminate\Http\Request::all() should not be called statically 报这个错

Anonymous

在文件头部使用use Request;删除use Illuminate\Http\Request;这一行

Anonymous
Route::get('article/{id}', 'ArticleController@show');
Route::get('article/create','ArticleController@create');

文章说添加第二个路由后出错了,原因输入 blog.dev/article/create ,其中的article 会被当成 第一个路由来判断。怎么解决?直接位置对调?

Anonymous

对,是这样的

Anonymous

博主好屌,我现在也在学一些7788的东西,感觉你前端做得很不错。我觉得你可以试着推荐一些资源,然后大家一起Happy Hacking,交流交流。刚转了点钱,希望不要嫌弃。

Anonymous

非常感谢,心意已收到,真的很感谢。说到资源,你是说哪方面的资源?laravel?你看看这个

https://laravist.com

后续的资源(问题讨论,视频,文章等)我会都在这里提供,博客只提供文章了,系列不会停更。btw,前端算业余

Anonymous

hi ,楼主
使用 illuminate/html 的时候, 我成功的下载好了 , 在config/app.php 中也同样配置完成 , 但是form表单没有样式 就是干巴巴的两个框 , 重新 php artisan serve 了还是一样 .什么原因呢 ?

Anonymous

补充一下 , 我的vendor/laravel/framework/src/Illuminate目录下 没有 上面说到的 Html 文件夹…

Anonymous

我的form表单也是干巴巴两个框,没有样式,同问

Anonymous
public function store()
    {
        $input = Request::all();
        return $input;
    }

Non-static method Illuminate\Http\Request::all() should not be called statically, assuming $this from incompatible context
Anonymous

样式文件群我之前的一篇说到过,你可以直接引入bootstrap或者这个。https://github.com/JellyBool/blog-css-js

Anonymous

哪里说的Html文件夹?

Anonymous

在文件头部使用use Request;去掉use Illuminate\Http\Request;或者使用\Request::all()

Anonymous

我引入了,其他页面都有样式,但是表单里面没有

Anonymous

我看一下你的表单代码?或者你用开发者工具看看css文件有没有引用到?在一个的原因就是你的表单没有指定class,我看看?

Anonymous

表单代码是create.blade.php里面的代码吗?用的是你的代码,用开发者工作看到引用了css文件

Anonymous
@extends('app')
@section('content')
	<h1>撰写新文章</h1>
{!! Form::open(['url'=>'article/store']) !!}
   <div class="form-group">
       {!! Form::label('title','标题:') !!}
       {!! Form::text('title',null,['class'=>'form-control']) !!}
   </div>
   <div class="form-group">
       {!! Form::label('content','正文:') !!}
       {!! Form::textarea('content',null,['class'=>'form-control']) !!}
   </div>
   <div class="form-group">
       {!! Form::submit('发表文章',['class'=>'btn btn-success form-control']) !!}
   </div>
{!! Form::close() !!}
@endsection
Anonymous

对,就是这个文件。

Anonymous

这个是app.blade.php里面的:

<!DOCTYPE html>
<html class="no-js" lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    <title>Laravel 5 教程</title>
    <link rel='stylesheet' href="/css/all.css" type='text/css' media='all'/>
    <script type='text/javascript' src="/js/all.js"></script>
    <link rel='stylesheet' href="/css/bootstrap.min.css" type='text/css' media='all'/>
    <link rel='stylesheet' href="/css/all.css" type='text/css' media='all'/>
</head>
<body>
<div id="wrapper">
     <div class="container">
                <section class="content">
                    <div class="pad group">
                        @yield('content')
                    </div>
                </section>
     </div>

     <nav class="nav-container group" id="nav-footer">
        <div class="nav-wrap">
            <ul class="nav container group">
                <li class="menu-item">
                    <a href="/" rel="nofollow" target="_blank">Laravel 5 Blog</a>
                </li>
            </ul>
        </div>
    </nav>

 </div>    
</body>
</html>
Anonymous

这不科学啊。。。

Anonymous

检查元素有看到css样式起作用么?

Anonymous

一开始首页也是没有样式的,后来这样引入就有样式了:、

@foreach($articles as $article)
<link rel='stylesheet' href="/css/bootstrap.min.css" type='text/css' media='all'/>
<link rel='stylesheet' href="/css/all.css" type='text/css' media='all'/>
<article class="format-image group">
    <h2 class="post-title pad">
        <a href="/articles/{ $article->id }"> { $article->title }</a>
    </h2>
    <div class="post-inner">
        <div class="post-deco">
            <div class="hex hex-small">
                <div class="hex-inner"><i class="fa"></i></div>
                <div class="corner-1"></div>
                <div class="corner-2"></div>
            </div>
        </div>
        <div class="post-content pad">
            <div class="entry custome">
                { $article->intro }
            </div>
            <a class="more-link-custom" href="/articles/{ $article->id }"><span><i>更多</i></span></a>
        </div>
    </div>
</article>
@endforeach
Anonymous

但是同样方法失败了

Anonymous
Remote Address:[::1]:80
Request URL:http://localhost/css/bootstrap.min.css
Request Method:GET
Status Code:404 Not Found
Anonymous

好像后台没有成功加载bootstrap.min.css

Anonymous

为什么要这样引入呢?在public/css/文件有没有对应得css文件

Anonymous

public/css/文件有对应的css文件,但是不这样引入的话,页面没有加载出来

Anonymous

怎么会》。。。app.blade.php你引入一次就好的啊

Anonymous

[汗]我终于找到问题根源了,原来你那文件里面没有bootstrap.min.css的文件,一直以为你里面有,刚去bootstrap网站下了,放进去就好了[囧]

Anonymous

你去bootstrap官网下载bootstrap的css文件放进public/css/里就可以了

Anonymous

博主什么时候更新呀,就要看完了,刚才去laravist注册,但是太快了,没去留意“qq邮箱屏蔽的字样”,结果qq邮箱一直没有验证信息,我原本想注册的名字显示被占用了(第一次注册时没有显示被占用)

Anonymous

我后台修改一下,你在注册一次吧

Anonymous

自动生成的store方法是有参数的

public function store(Request $request)
{
    $input = $request->all();
    Article::create($input);
    return redirect('/');
}

这里遇到问题了,Article::create($input) 方法并没有按你说的会忽略_token,出现了 MassAssignmentException,我unset掉$input[’_token’]也还是这样。求解

Anonymous

下载下来就看到少了个bootstrap

Anonymous

如果你看过前面的教程的话,这个MassAssignmentException并不是只token,而是我们是否可以直接填充某个模型的数据来创建记录。你可以通过在模型文件中使用$fillable来指定可以填充的内容。

Anonymous

有参数并不影响啊,解决你的问题可以这样 protected $fillable = [‘content’,‘title’];

https://jellybool.com/post/programming-with-laravel-5-database-and-eloquent-model
详细用法看连接

Anonymous

哦哦,我看到了$fillable,却没有注意到时在Model里面添加的,多谢。

Anonymous

原来你所说的忽略不是因为_token这个参数的名字,而是因为它不在Article里。。。理解错了

Anonymous

没事,解决问题就好

Anonymous

在博主的指导下,我已经可以添加博客了,我对博主的喜爱那是滔滔江水啊

Anonymous

哈哈哈,谢谢,谢谢

Anonymous

啊哈哈,感谢感谢,把你放到感谢列表上可以不?

Anonymous

[汗] 看来你没上微博。。。。我私信你了的,,。

Anonymous

这个私信没有提示。。。

Anonymous

你还是把我名字写上了。。。

Anonymous

改了。。。等下推代码

Anonymous

想问下 provide数组中,每一项后面跟着的::class是什么作用呢?哪都没查到[委屈]

Anonymous

应该是laravel facade的一种写法而已

Anonymous

可能是把。哈哈哈

Anonymous

还有个小问题,刚看了下Illuminate/html,如果当前表单提交后数据验证不通过,302重定向后,它会去session调前一次表单提交的数据,但是。。之后会把“该session文件中的提交数据,检验报的error删去”,这一步找了半天并未找到在哪处理的。。博主有研究过么。

Anonymous

你说的这个 “检验报的error删去”是指errors会像Session::flash一样,刷新一次就没有了的意思?没看懂什么意思

Anonymous

表单某些数据为空的情况下,点击提交,会因为设了验证重定向到该页面,然后illuminate/html生成表单input的时候读取session文件中,刚才提交的值并给input赋值。这之后session文件会被修改,把存着的刚才提交的值等信息删除。这最后一步操作的执行,我没找到。

Anonymous

额,这个意思,你是说的源码吧,我看看

Anonymous

文章最后$input[‘published_at’] = Carbon::now();出错了
Class ‘App\Http\Controllers\Carbon’ not found
是不是要use哪个文件?

Anonymous

恩恩,

use Carbon\Carbon;
Anonymous
 public function store(Request $request)
    {
        $input = $request->all();
        Article::create($input);
         return redirect('/articles');

    }

就可以了

Anonymous

还更新啥,不是都有么?录了一个系列视频 https://laravist.com/series/laravel-5-basic

Anonymous

file_put_contents(/var/www/laravel/bootstrap/cache/services.json): failed to open stream: Permission denied

Anonymous

PDOException in Connector.php line 55:
could not find driver

Anonymous
apt-get install php-mysql
Anonymous

估计是权限不足吧

Anonymous

哈哈,博主你好,刚刚我也给你转了点零钱,不多,别嫌弃,因为这是我第一次捐赠给别人(以前都是接受别人的捐赠)

第一,我也在成都
第二,我是乐山的,看你游历时经过了那里
第三,我也是技术宅
第四,我也是“高手”,只不过是另外一个领域的(Drupal猎人学校:www.drupalhunter.com),最近深入学习框架,然后听朋友介绍来到了你的博客
第五,最重要的,你的文章确实,难能可贵的帮助我很愉快的完成了laravel的入门学习

所以,感谢,有机会在成都街上遇到也可以交流哦,对了,我其实是个逗逼!

Anonymous

原来是你啊,感谢感谢。很荣幸

Anonymous

Hello!多谢楼主写的详细文章,对学习laravel很有帮助!我在学习form这堂课的时候,发现 _token这个属性并没有值,chrome查看元素没有value,是不是还需要配置什么东西呢?

Anonymous

哦,我知道了,在router里 Route::group([‘middleware’ => [‘web’]], function () {});这个路由里还需要配置

Anonymous

此贴终结,给后来者也做个参考,首先得把路由写到 middleware 的内部函数里,然后需要检查.env的app_key是否符合要求(32位长度),不符合,需要用 php artisan key:generate 生成一个,然后把key复制粘贴到 .env 或者 app.php 的’key’ => env(‘APP_KEY’,‘你的key’) 中。我是这么解决了。

Anonymous

楼主你好,非常感谢你的文章和视频。想请问一个问题,我用composer安装illuminate/html 好之后,config/app.php的2行代码也配置了,但是出现了这个错误:

 [Symfony\Component\Debug\Exception\FatalErrorException]                   
  Call to undefined method Illuminate\Foundation\Application::bindShared() 
~~~~~~
Anonymous

然后发现laravel的服务器也启动不了了,就是上面这个错误,求助~~~~[泪][泪]

Anonymous

评论一个我遇到的问题,composer安装好 package之后,app.php里也配置了,可是打开浏览器就是没有表单,网页源代码里也没有 表单

标签,,,提示错误是,Call to undefined method Illuminate\Foundation\Application::bindShared() ,
后来Google了一下,得到的答案是:bindShared has been renamed to $app->singleton()。然后找到 HtmlServiceProvider.php文件,将里面的bindShared()方法,换成 $app->singleton(),问题解决了!

yu119043355 回复 Anonymous

感谢分享!!

Anonymous

随便有个问题想问博主,laravel里的文件 ,.env和.env.example有什么关系或者说不同吗,我看里面的内容大致 差不多。

Anonymous

楼主你好,当我执行
composer require illuminate/html
老是报错:Failed to decode response: zlib_decode(): data error

Anonymous

貌似 composer require illuminate/html 这个官方不支持了?
我看官方现在用这个package了 laravelcollective/html
使用方法

Begin by installing this package through Composer. Edit your project's composer.json file to require laravelcollective/html.
"require": {
    "laravelcollective/html": "5.2.*"
}
Next, update Composer from the Terminal:
composer update
Next, add your new provider to the providers array of config/app.php:
  'providers' => [
    // ...
    Collective\Html\HtmlServiceProvider::class,
    // ...
  ],
Finally, add two class aliases to the aliases array of config/app.php:
  'aliases' => [
    // ...
      'Form' => Collective\Html\FormFacade::class,
      'Html' => Collective\Html\HtmlFacade::class,
    // ...
  ],

final, composer dump-autoload
Anonymous

咦,好奇怪,我这里在从form创建Model的时候laravel并没有自动过滤掉_token这个字段,提示我赋值出错。应该怎么解决呢?

Anonymous

except("_token")

Anonymous

表单验证提示信息,如何自定义?[委屈]

Anonymous

如: 请输入登录用户名

cheungboss
echo "cool!";
zhouwenbin

ErrorException in HtmlServiceProvider.php line 36:
Call to undefined method Illuminate\Foundation\Application::bindShared() (View: /home/vagrant/Code/quasar-starter-backend/resources/views/articles/create.blade.php)
报了这个错laravel 5.2版

JellyBool 回复 zhouwenbin

额。。你班之前的 Illuminate/html 删掉就好了吧

zhouwenbin 回复 JellyBool

删掉还是报这个错

JellyBool 回复 zhouwenbin

额,你确定你把 Illuminate/html 配置都删完了么

hehorange

这个需要怎么改啊?其他页面都正常,只有article\create这个页面是这样。

JellyBool 回复 hehorange

额,没有正确引用到 js 和 css 吧。你开 chrome dev-tool 看看就知道了

yh4494

laravel5.2要引入"laravelcollective/html": "~5.0"进行升级。下面是方法帖子:http://www.tuicool.com/articles/R73MJvn

kissgxd

This package is abandoned and no longer maintained. The author suggests using the laravelcollective/html package instead.

ReviveKwan

请教一下 文件上传的话,如何获取默认文件值
比如

当用户修改表单后 原值返回给控制器