Laravel 5 系列入门教程(二)【最适合中国人的 Laravel 教程】

2015-3-8   /   字数:9087   /   阅读数:178181   /   分类: Laravel     

本教程示例代码见:https://github.com/johnlui/Learn-Laravel-5  

大家在任何地方卡住,最快捷的解决方式就是去看我的示例代码。

我们将改变学习路线,不再像 Laravel 4 教程那样先构建登录系统。在本篇教程中,我们将一起构建 Pages 的管理功能,尝试 Laravel 的路由和 PHP 的命名空间

1. 路由

Laravel 中的路由,跟其他 PHP 框架一样,作用是把各种请求分流到各个控制器。

在 `learnlaravel5/app/Http/routes.php` 的末尾添加以下代码:

Route::group(['prefix' => 'admin', 'namespace' => 'Admin'], function()
{
  Route::get('/', 'AdminHomeController@index');
});

这表示创建了一个路由组。

1. `'prefix' => 'admin'` 表示这个路由组的 url 前缀是 /admin,也就是说中间那一行代码 `Route::get('/'` 对应的链接不是 http://fuck.io:88/ 而是 http://fuck.io:88/admin ,如果这段代码是 `Route::get('fuck'` 的话,那么 URL 就应该是 http://fuck.io:88/admin/fuck

2. `'namespace' => 'Admin'` 表示下面的 `AdminHomeController@index` 不是在 `\App\Http\Controllers\AdminHomeController@index` 而是在 `\App\Http\Controllers\Admin\AdminHomeController@index`,加上了一个命名空间的前缀。

如果你用过 Laravel 4,会发现 Laravel 5 的命名空间规划比较怪异,这其实是一个非常大的进步。Laravel 4 其实已经全面引入了命名空间这个强大的特性,但是为了“降低学习成本”,把 路由、控制器、模型 的默认命名空间全部设置成了顶级命名空间,这个举动反而让很多人比较轻易地“上手”了 Laravel,但是在用了一段时间以后,还需要翻越一堵高墙,那就是命名空间,而且有了前面的“容易上手”的印象作为铺垫,后期的学习会更加困难。Laravel 5 把命名空间全部隔开,控制器在 `\App\Http\Controllers`,模型在 `\App`,让我们在刚上手的时候就体验命名空间分离的感觉,总体上其实是会降低学习成本的。

2. 控制器

我们可以使用 Artisan 非常方便地构建控制器:

php artisan make:controller Admin/AdminHomeController

得到 `learnlaravel5/app/Http/Controllers/Admin/AdminHomeController.php` 文件。

在 `class AdminHomeController extends Controller {` 上面增加一行:

use App\Page;

修改 index() 的代码如下:

public function index()
{
  return view('AdminHome')->withPages(Page::all());
}

控制器中文文档:http://laravel-china.org/docs/5.0/controllers

控制器中涉及到了许多的命名空间知识,可以参考 PHP 命名空间 解惑

3. 视图

新建 `learnlaravel5/resources/views/AdminHome.blade.php`:

@extends('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">后台首页</div>

        <div class="panel-body">

        <a href="{{ URL('admin/pages/create') }}" class="btn btn-lg btn-primary">新增</a>

          @foreach ($pages as $page)
            <hr>
            <div class="page">
              <h4>{{ $page->title }}</h4>
              <div class="content">
                <p>
                  {{ $page->body }}
                </p>
              </div>
            </div>
            <a href="{{ URL('admin/pages/'.$page->id.'/edit') }}" class="btn btn-success">编辑</a>

            <form action="{{ URL('admin/pages/'.$page->id) }}" method="POST" style="display: inline;">
              <input name="_method" type="hidden" value="DELETE">
              <input type="hidden" name="_token" value="{{ csrf_token() }}">
              <button type="submit" class="btn btn-danger">删除</button>
            </form>
          @endforeach

        </div>
      </div>
    </div>
  </div>
</div>
@endsection

视图的基本用法在此不再赘述,请阅读中文文档:http://laravel-china.org/docs/5.0/views

访问 http://fuck.io:88/admin 得到如下页面:

Image

至此,包含 路由 》 控制器 》 模型 》 视图 的整个流程都已经完成。

4. 完成 Pages 管理功能

接下来,我将记录下我实现 Pages 管理功能的过程,不再做过多的阐述。大家有问题可以直接在本文下面留言,我会及时回复。

4.1 修改路由 learnlaravel5/app/Http/routes.php

Route::group(['prefix' => 'admin', 'namespace' => 'Admin'], function()
{
  Route::get('/', 'AdminHomeController@index');
  Route::resource('pages', 'PagesController');
});

此处增加了一条“资源控制器”,中文文档地址:http://laravel-china.org/docs/5.0/controllers#restful-resource-controllers

4.2 创建 learnlaravel5/app/Http/Controllers/Admin/PagesController.php

运行:

php artisan make:controller Admin/PagesController

4.3 修改 learnlaravel5/app/Http/Controllers/Admin/PagesController.php 为:

<?php namespace App\Http\Controllers\Admin;

use App\Http\Requests;
use App\Http\Controllers\Controller;

use Illuminate\Http\Request;

use App\Page;

use Redirect, Input, Auth;

class PagesController extends Controller {

	/**
	 * Show the form for creating a new resource.
	 *
	 * @return Response
	 */
	public function create()
	{
		return view('admin.pages.create');
	}

	/**
	 * Store a newly created resource in storage.
	 *
	 * @return Response
	 */
	public function store(Request $request)
	{
		$this->validate($request, [
			'title' => 'required|unique:pages|max:255',
			'body' => 'required',
		]);

		$page = new Page;
		$page->title = Input::get('title');
		$page->body = Input::get('body');
		$page->user_id = 1;//Auth::user()->id;

		if ($page->save()) {
			return Redirect::to('admin');
		} else {
			return Redirect::back()->withInput()->withErrors('保存失败!');
		}

	}

	/**
	 * Show the form for editing the specified resource.
	 *
	 * @param  int  $id
	 * @return Response
	 */
	public function edit($id)
	{
		return view('admin.pages.edit')->withPage(Page::find($id));
	}

	/**
	 * Update the specified resource in storage.
	 *
	 * @param  int  $id
	 * @return Response
	 */
	public function update(Request $request,$id)
	{
		$this->validate($request, [
			'title' => 'required|unique:pages,title,'.$id.'|max:255',
			'body' => 'required',
		]);

		$page = Page::find($id);
		$page->title = Input::get('title');
		$page->body = Input::get('body');
		$page->user_id = 1;//Auth::user()->id;

		if ($page->save()) {
			return Redirect::to('admin');
		} else {
			return Redirect::back()->withInput()->withErrors('保存失败!');
		}
	}

	/**
	 * Remove the specified resource from storage.
	 *
	 * @param  int  $id
	 * @return Response
	 */
	public function destroy($id)
	{
		$page = Page::find($id);
		$page->delete();

		return Redirect::to('admin');
	}

}

4.4 创建视图文件

首先在 learnlaravel5/resources/views 下创建 admin/pages 两级文件夹。

然后创建 learnlaravel5/resources/views/admin/pages/create.blade.php:

@extends('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">新增 Page</div>

        <div class="panel-body">

          @if (count($errors) > 0)
            <div class="alert alert-danger">
              <strong>Whoops!</strong> There were some problems with your input.<br><br>
              <ul>
                @foreach ($errors->all() as $error)
                  <li>{{ $error }}</li>
                @endforeach
              </ul>
            </div>
          @endif

          <form action="{{ URL('admin/pages') }}" method="POST">
            <input type="hidden" name="_token" value="{{ csrf_token() }}">
            <input type="text" name="title" class="form-control" required="required">
            <br>
            <textarea name="body" rows="10" class="form-control" required="required"></textarea>
            <br>
            <button class="btn btn-lg btn-info">新增 Page</button>
          </form>

        </div>
      </div>
    </div>
  </div>
</div>
@endsection

之后创建 learnlaravel5/resources/views/admin/pages/edit.blade.php:

@extends('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">编辑 Page</div>

        <div class="panel-body">

          @if (count($errors) > 0)
            <div class="alert alert-danger">
              <strong>Whoops!</strong> There were some problems with your input.<br><br>
              <ul>
                @foreach ($errors->all() as $error)
                  <li>{{ $error }}</li>
                @endforeach
              </ul>
            </div>
          @endif

          <form action="{{ URL('admin/pages/'.$page->id) }}" method="POST">
            <input name="_method" type="hidden" value="PUT">
            <input type="hidden" name="_token" value="{{ csrf_token() }}">
            <input type="text" name="title" class="form-control" required="required" value="{{ $page->title }}">
            <br>
            <textarea name="body" rows="10" class="form-control" required="required">{{ $page->body }}</textarea>
            <br>
            <button class="btn btn-lg btn-info">编辑 Page</button>
          </form>

        </div>
      </div>
    </div>
  </div>
</div>
@endsection

4.5 查看结果

后台首页 http://fuck.io:88/admin

Image

新增 Page http://fuck.io:88/admin/pages/create

Image

编辑 Page http://fuck.io:88/admin/pages/1/edit

Image

页面上的新增、编辑、删除的功能均已经完成,并且加入了表单验证,Pages 管理功能完成!



教程(二)代码快照:https://github.com/johnlui/Learn-Laravel-5/archive/tutorial_2.zip


下一步:Laravel 5 系列入门教程(三)【最适合中国人的 Laravel 教程】

WRITTEN BY

avatar

评论:

leo
2016-05-26 10:35
博主你好,刚才的问题解决了,我找到的一个国外的论坛说routes.php文件的命名空间要这样写:use Illuminate\Support\Facades\Route;,而不是按照原先的:use Illuminate\Routing\Route;但我还是有点不太理解为什么要这样写呢?
刚才运行的语句是:php artisan make:controller Admin/AdminHomeController
刚才的报错是: Call to undefined method Illuminate\Routing\Route::get()
Bob
2016-08-09 17:21
@leo:看看这个吧
http://www.tuicool.com/articles/Bfi2Y3f
leo
2016-05-26 10:10
运行php artisan make:controller Admin/AdminHomeController的时候报错
:[Symfony\Component\Debug\Exception\FatalErrorException]
  Call to undefined method Illuminate\Routing\Route::get()
这是怎么回事呢?
yanzi
2016-05-13 18:22
<form action="{{ URL('admin/pages/'.$page->id) }}" method="POST" style="display: inline;">
                                <input name="_method" type="hidden" value="DELETE">
                                <input type="hidden" name="_token" value="{{ csrf_token() }}">
                                <button type="submit" class="btn btn-danger">删除</button>
</form> 这是如何删除的呀
轻歌
2016-04-17 10:19
如果我想用Model管理多个MySQL数据库,要怎么做?
梦遥奇缘
2016-03-31 00:15
博主,请问下关于访问admin出现404时,怎样解决nginx的伪静态问题?在官网上看到有句如何优雅的使用伪静态,但是配置后直接nginx不能重启了,求贴nginx配置。
强有力的实力丶
2016-03-30 17:47
为什么我按照楼主的教程做完以后,没有显示bootstarp的样式,点击新增、编辑、删除后跳转报错。下面是提示信息:
Sorry, the page you are looking for could not be found.
NotFoundHttpException in RouteCollection.php line 145:

求解这是什么情况~~~~~
mozhe
2016-03-27 21:57
博主你好,我想问下,为什么我用return Redirect::back()->withInput()->withErrors('保存失败!');页面上得不到$errors,也没有保留之前填写的数据呢?
JohnLui
2016-03-27 23:40
@mozhe:Laravel 5.2 已经改变了很多系统组件的工作方式,使用 redirect()->back() 试试吧
单独
2016-03-23 11:26
create.blade.php
中的(count($errors) > 0)  errors在哪定义的?提示变量未定义
东方财富
2016-01-22 19:39
楼主 这个框架怎么写form提交地址?
无限上网
2016-01-17 20:04
FatalErrorException in AdminHomeController.php
line 16: Class 'app\Page' not found

我把use app\Page;改成小写也不行,
我的文件夹名是小写的
Carrie
2016-01-28 13:30
@无限上网:同问,文件目录是小写app,程序中的namespace全是App...
类似use App\Http\Requests;在app下这个路径还是存在的,但是App\Page没有这个路径...
霜落夜白
2016-04-05 13:26
@无限上网:这个应该是model吧。。。有建page 模型么
5959
2015-12-02 16:34
报错:Class 'App\Page' not found
yanhws
2016-01-08 17:33
@5959:你命名空间的 app 可能是小写的 改成小写应该就好了
motoon
2015-12-01 14:26
老师你好,
@extends('app')
中app文件在哪里啊,为什么找不到呢?
JohnLui
2015-12-01 15:01
@motoon:app.blade.php
tju
2015-11-24 00:12
你是大神!初学者的福音啊!
李传奇
2015-11-18 16:36
@extends('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">后台首页</div>

        <div class="panel-body">

        <a href="{{ URL('admin/pages/create') }}" class="btn btn-lg btn-primary">新增</a>

          @foreach ($pages as $page)
            <hr>
            <div class="page">
              <h4>{{ $page->title }}</h4>
              <div class="content">
                <p>
                  {{ $page->body }}
                </p>
              </div>
            </div>

请问@foreach ($pages as $page)中pages的定义在哪里?急切求解答
sha
2015-11-22 10:05
@李传奇:视图由AdminHomeController的index方法传送过去的
view('AdminHome')->withPages(Page::all())

page模型继承model模型
class Page extends Model

model模型中有一个all方法,查询数据库所有字段

withPages是指查询Pages表

相关文件:
page模型:app/Page.php
model模型: vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php
AdminHomeController控制器:app/Http/Controllers/Admin/AdminHomeController.php
个人理解,如有误请更正。
ying
2016-08-04 10:26
@sha:withPages是指查询Pages表  我觉得这句话可能不对,如果把这句改成:withP ,视图文件里 @foreach ($p as $page) 也是可以运行的,难道这是指的p表?
123
2016-11-09 10:47
@ying:改了并不可以运行啊
laravel初学者
2015-11-17 17:09
楼主,form要加上上传文件的功能,加了这句
<form action="{{ URL('admin/pages') }}" method="POST" enctype="multipart/form-data">
   <input type="file" name="myfile" multiple="true">,在点击提交的时候报“There were some problems with your input.

The myfile format is invalid.”,向您请教下这个是哪里出了问题?
JohnLui
2015-11-17 17:14
@laravel初学者:你上传的文件类型有问题
nashJG
2015-11-13 21:47
老师,我新安装的laravel5,用POST方法提交表单总是出现 TokenMismatchException错误
我的页面表单代码:
<form action="p1" method="POST">
    <input type="hidden" name="_token" value="<?php echo csrf_token() ?>">
    <input type="submit" vlaue="Test">
</form>
路由中添加了:
Route::post('p1',function(){
    return "hello laravel by POST!";
});

我把csrf禁用之后可以正常显示,开始csrf总是token mismatchexception,请您帮忙解答一下
JohnLui
2015-11-13 23:46
@nashJG:对比一下你的和我的视图文件,你就会明白的
nashJG
2015-11-14 00:10
@JohnLui:对比了一下您的表单,您用的是
<input type="hidden" name="_token" value="{{ csrf_token() }}">
我试了这种方法,还是提示TokenMismatchException in VerifyCsrfToken.php line 46:
hans
2015-11-07 09:33
GET                     /admin                             索引     AdminHomeController::index
GET                     /admin/pages/create     创建     PagesController::create
POST             /admin/pages                     保存     PagesController::store
GET                     /admin/pages/{id}             显示            PagesController::show
GET                     /admin/pages/{id}/edit       编辑    PagesController::edit
PUT/PATCH     /admin/pages/{id}             更新            PagesController::update
DELETE             /admin/pages/{pages}     删除      PagesController::destroy
把这个对应关系加进去,可以看的更清楚
yanzi
2016-05-13 18:18
@hans:GET                     /admin                             索引     AdminHomeController::index
GET                     /admin/pages/create     创建     PagesController::create
POST             /admin/pages                     保存     PagesController::store
GET                     /admin/pages/{id}             显示            PagesController::show
GET                     /admin/pages/{id}/edit       编辑    PagesController::edit
PUT/PATCH     /admin/pages/{id}             更新            PagesController::update
DELETE             /admin/pages/{pages}     删除      PagesController::destroy
这个需要在什么地方配置吗
hans
2015-11-07 09:24
HTTP请求 -> 路由 -> 控制器 -> 模型 -> 视图  

2015-11-05 15:42
楼主大大 请教一下 我按照教程操作,页面显示都正常,就是执行新增和编辑的时候 PagesController报错:
Undefined variable: request
页面里也引入了use Illuminate\Http\Request;
$this->validate($request, []); 就是这个$request找不到 。是什么原因呢?
JohnLui
2015-11-06 00:40
@牛:因为 public function store(Request $request) 括号里的参数你可能没写
Yingdynasty
2015-11-03 11:43
问题已经解决了
’admin\xxxx\‘.$xxxx->id  
其中这个反斜杠是不能省略的
Yingdynasty
2015-11-03 11:32
博主 麻烦问您一下
view里面的这个完成修改:
  <form action="{{ URL('home/containers'.$container->id.)}}" method="POST">
            <input name="_method" type="hidden" value="PUT">
            <input type="hidden" name="_token" value="{{ csrf_token() }}">
   </form>

controller里面的
    public function update(Request $request,$id)
    {
        $this->validate($request, [
            'id' => 'required',
            'container_code' => 'required',
        ]);

        $Container = Container::find($id);
                    //还有其他代码
        if($Container->save()){
            return Redirect::to('home/container_info');//这个页面确实存在
            }
            else{
            return Redirect::back()->withInput()->withErrors('保存失败!');
            }

        }

但是完成修改时候他会报错
Sorry, the page you are looking for could not be found.
1/1
NotFoundHttpException in RouteCollection.php line 145:

万分感谢博主的时间~~
Ying
Jennifer
2015-11-02 10:52
刚才的问题,我已经知道了。不好意思,打扰了。
Jennifer
2015-11-02 10:49
Class 'App\Http\Controllers\Admin\Input' not found
报错没有引入Input和Redirect这两个文件,请问这两个文件在什么地方啊?
loveleo99
2016-03-22 17:00
@Jennifer:百度到的,测试可用
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Redirect;
了不起的点赞
2016-06-14 16:35
@loveleo99:不错不错
JokerLinly
2015-10-28 14:34
你好,我想问一下,{{ $page->created_at }} 如果是要显示时间,而且是按照年月日的格式来显示的话,要怎么写?我尝试查过API,可是无从下手。求回复,谢谢!
JohnLui
2015-10-28 14:36
@JokerLinly:用 PHP 自带函数处理就可以。
hello
2015-10-23 14:59
执行php artisan make:controller Admin/AdminHomeController 显示 could not open input file:artisan
JohnLui
2015-10-23 15:04
@hello:artisan 是根目录下的一个文件,注意要 cd 到 learnlaravel5 目录下~
rain
2015-10-22 12:00
如何关闭指定路由的csrf, 比如说支付网关的,有其他途径来验证真实性,而用了csrf无法接收支付宝发来的post数据,

但是又不想全局禁用csrf。有什么办法没
JohnLui
2015-10-23 15:04
@rain:可以全局禁用,然后在某些路由组里打开。
Lisam
2015-10-20 10:21
请问下博主 laravel如何与App通信并返回json数据  听说可以用restful接口 但我也不清楚在哪里
JohnLui
2015-10-20 10:56
@Lisam:Laravel 有 return Response::json($data);
asc
2015-10-07 14:50
为何我的中文都是乱码?改哪里啊?
Apache
2015-10-13 11:46
@asc:把创建的view另存为utf-8格式的就ok了
nanf
2015-10-25 15:12
@Apache:请问这个具体怎么设置?
uping
2015-10-01 16:09
楼主我AdminHome出现这个错误,我和你的igt对比没差啊
Class App\Http\Controllers\Admin\adminHomeController does not exist
JohnLui
2015-10-01 17:21
@uping:adminHomeController A 要大写。。。
姚瑞
2015-10-03 22:48
@uping:哈哈,粗心
淹死的鱼
2015-09-29 15:34
感谢博主
TP9
2015-09-27 22:50
当点击新增时,页面会跳转到admin/pages/create,请问这个在路由里面没有设置,是在哪里设置的呢?
Apache
2015-10-13 11:52
@TP9:不用设置路由
点击新增按钮访问的是PagesController控制器的create方法,这个方法决定你要显示的内容:
public function create()
{
    //返回到create视图
    return view('admin.pages.create');
}
TP9
2015-09-27 22:18
博主你好,在admin下,也就是主页下,点击新增,这是会自动跳转到admin/pages/create,我想问一下,我在路由里面也没有看到你设置跳转啊,你是在哪里设置的?
jc
2015-09-22 13:31
博主,你好!
程序里面加了
@extends('app')

@section('content')
页面就显示空白也。去掉后就可以显示出来。这个是什么原因造成的?
Grace
2015-12-06 15:59
@jc:@section('example')
@show
这个要写完整吧
jc
2015-09-22 09:31
博主,你好!
routes代码如下:
Route::group(['prefix' => 'admin', 'namespace' => 'Admin'], function()
{
    Route::get('/', 'AdminHomeController@index');
    //Route::resource('pages', 'PagesController');
});
运行出现这个异常是什么原因导致的
at CompilerEngine->get('E:\www\learnlaravel5\resources\views/AdminHome.blade.php', array('__env' => object(Factory), 'app' => object(Application), 'errors' => object(ViewErrorBag), 'pages' => object(Collection))) in View.php line 138
随便我去
2015-09-19 10:04
删除不成功呀= =
wushd
2015-09-16 17:24
博主,请问一下,为什么我用http://地址/admin打开报错404,然后用http://地址/index.php/admin却可以打开页面呢
Qizi
2015-09-17 23:28
@wushd:伪静态问题,你要开启apache的rewrite模块
Eileen
2015-10-17 12:17
@Qizi:老师你好,我开启了那个功能还是不行啊,还是报错这个
阿莫
2015-09-14 19:20
博主您好!
test.com/laravel/  以及 test.com/laravel/1  这样的路由可以配置出来。

但 test.com/laravel/1.html   这样的地址, 路由怎么写,是和上面的两个地址访问的是一个地方呢?
why
2015-08-24 10:52
博主你好
我在显示模板的时候 出现
syntax error, unexpected end of file  

是因为@stop吗
Lisam
2015-08-22 23:06
博主
<form action="{{ URL('admin/pages') }}" method="POST">
            <input type="hidden" name="_token" value="{{ csrf_token() }}">
            <input type="text" name="title" class="form-control" required="required">
            <br>
            <textarea name="body" rows="10" class="form-control" required="required"></textarea>
            <br>
            <button class="btn btn-lg btn-info">新增 Page</button>
          </form>
这里面的{{ URL('admin/pages') }} 为什么能指向PagesController.php中的store方法
JohnLui
2015-08-22 23:54
@Lisam:因为 http://www.golaravel.com/laravel/docs/5.1/controllers/#restful-resource-controllers
Lisam
2015-08-23 11:32
@JohnLui:谢谢博主
bluebug
2015-08-19 14:58
根据你的教程 做出第一个laravel无限分类的查询资料系统,赞一个哦
cys
2015-08-19 13:19
http://[我的地址]/admin,显示空白阿。怎么回事,在AdminHomeController.php中修改index方法为echo 'Hello'测试一下,可以显示Hello。所以问题应该就是没法渲染View吧,但是我就是找不出修正的方法。
JohnLui
2015-08-22 14:08
@cys:空白是 PHP 语法错误。
laoss
2015-08-18 14:37
编写完代码之后,点击新增和编辑显示View [admin.pages.create] not found.View [admin.pages.edit] not found.请问是什么问题
景仁景行
2015-08-05 16:16
楼主你好,我按照教程执行,会报这样一个错误:
Fatal error: Class 'Illuminate\Foundation\Application' not found in E:\laravel\learnlaravel5\bootstrap\app.php on line 14
上一篇文章中有人也遇到了这个问题,楼主的回答是是否php版本过低,我看了下我的版本,是5.6的!
JohnLui
2015-08-22 14:05
@景仁景行:应该是没有 composer update 成功
Q_发
2015-08-03 21:16
博主,laravel5用什么debug工具能做到:1.单步调试;2.计算数据库查询耗时
ttxer
2015-07-24 22:43
为什么非要让php做那么多事呢,连MySQL应该做的事情都被抢了,反而觉得没有单独开发数据库的效率高
Apache
2015-10-13 12:07
@ttxer:你指的是 migrations seeds?
我也是初学,感觉这么做实际上是体现了laravel的先进性,简化了版本控制、分发的操作过程,感觉还有更多的好处,只是不知道怎么去描述。
like
2015-07-23 16:44
真心谢谢这几篇文章,适合入门学习。
另外,像return   view('AdminHome')->withPages(Page::all()); 这里只能传一个参数,如果有多个参数应该怎么写呢?
JohnLui
2015-07-24 17:35
@like:继续 with
xxx
2015-07-22 17:49
博主请问  @foreach ($pages as $page)中的@pages代表什么?是不是可以随意修改?
JohnLui
2015-08-22 14:06
@xxx:代表前面传过来的 ->withPages() 这个变量 $pages。
胖子
2015-09-11 14:32
@JohnLui:老师, @foreach ($pages as $page)中的$pages 我已经解决了,那请教$page是什么含义,我进行了修改,报错。感觉也是个比较重要的东西。
胖子
2015-09-11 14:36
@JohnLui:已经搞懂,$page是作为一个别名就行使用,
菜花
2015-07-22 09:59
博主你好,请教个问题,我想使用laravel 5 的elixir扩展,但是安装总是会报错。
以下是报错内容,求教如何处理~感激不尽!


Building: C:\Program Files (x86)\nodejs\node.exe node_modules\pangyp\bin\node-gy
p rebuild --libsass_ext= --libsass_cflags= --libsass_ldflags= --libsass_library=

gyp ERR! configure error
gyp ERR! stack Error: Can't find Python executable "python", you can set the PYT
HON env variable.
gyp ERR! stack     at failNoPython (E:\xampp\htdocs\www\test\node_modules\
laravel-elixir\node_modules\gulp-sass\node_modules\node-sass\node_modules\pangyp
\lib\configure.js:104:14)
gyp ERR! stack     at E:\xampp\htdocs\www\test\node_modules\laravel-elixir
\node_modules\gulp-sass\node_modules\node-sass\node_modules\pangyp\lib\configure
.js:65:11
gyp ERR! stack     at FSReqWrap.oncomplete (evalmachine.<anonymous>:95:15)
gyp ERR! System Windows_NT 6.1.7601
gyp ERR! command "C:\\Program Files (x86)\\nodejs\\node.exe" "E:\\xampp\\htdocs\
\www\\spayz-demo\\node_modules\\laravel-elixir\\node_modules\\gulp-sass\\node_mo
dules\\node-sass\\node_modules\\pangyp\\bin\\node-gyp" "rebuild" "--libsass_ext=
" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
gyp ERR! cwd E:\xampp\htdocs\www\test\node_modules\laravel-elixir\node_mod
ules\gulp-sass\node_modules\node-sass
gyp ERR! node -v v0.12.7
gyp ERR! pangyp -v v2.2.1
gyp ERR! not ok
Build failed
npm ERR! Windows_NT 6.1.7601
npm ERR! argv "C:\\Program Files (x86)\\nodejs\\\\node.exe" "C:\\Program Files (
x86)\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "install"
npm ERR! node v0.12.7
npm ERR! npm  v2.11.3
npm ERR! path C:\Users\Administrator\AppData\Roaming\npm-cache\through2\0.6.5\pa
ckage\package.json
npm ERR! code EPERM
npm ERR! errno -4048

npm ERR! Error: EPERM, rename 'C:\Users\Administrator\AppData\Roaming\npm-cache\
through2\0.6.5\package\package.json'
npm ERR!     at Error (native)
npm ERR!  { [Error: EPERM, rename 'C:\Users\Administrator\AppData\Roaming\npm-ca
che\through2\0.6.5\package\package.json']
npm ERR!   errno: -4048,
npm ERR!   code: 'EPERM',
npm ERR!   path: 'C:\\Users\\Administrator\\AppData\\Roaming\\npm-cache\\through
2\\0.6.5\\package\\package.json',
npm ERR!   parent: 'gulp-todo' }
npm ERR!
npm ERR! Please try running this command again as root/Administrator.

npm ERR! Please include the following file with any support request:
npm ERR!     E:\xampp\htdocs\www\spayz-demo\npm-debug.log
JohnLui
2015-08-22 14:08
@菜花:gyp ERR! stack Error: Can't find Python executable "python", you can set the PYT
HON env variable.

没有python。
Ake
2015-07-21 12:04
大神 怎么把邮箱登录换成用户名啊
helenandyoyo
2015-07-15 19:32
博主你好:
         学习《laravel 5 系列入门教程二》的”3 视图“之后,我本人在浏览器端运行localhost:8000/admin后,出现的页面不是您随后贴出的页面,而是”4.5查看结果“中的第一个页面。既然”3 视图“的html代码中存在”后台首页“,”编辑“,”删除“,我个人理解就是页面中应该会出现这三个的button,正如”4.5查看结果“中的第一个页面一样。不知是否是我理解有误?还望博主解惑。(ps:博主的博客做的简洁大方,非常欣赏!!!,这里我大言不惭的有一个小小的请求:可不可以加一个”返回顶部“/"置顶"的功能,因为在写评论或观看别人的评论中途想更方便地返回到页面首部)
       非常感谢!!!
JohnLui
2015-07-21 14:27
@helenandyoyo:可以按一下 home ~
Daniel
2015-07-10 01:36
TokenMissMatchException是什么原因导致的呢?是因为没有配置数据库吗?
JohnLui
2015-07-10 11:29
@Daniel:你没加这句:<input type="hidden" name="_token" value="{{ csrf_token() }}">
一叶扁舟
2015-07-09 10:51
很好的教程
大白一号
2015-07-03 14:45
大神, $this->validate($request, [
            'title' => 'required|unique:pages|max:255',
            'body' => 'required',
        ]);
为啥会报错,Use of undefined constant request - assumed 'request',去掉则没事,这句语句用来干嘛的呀,求问。。。
键盘侠
2015-09-17 17:06
@大白一号:这个是因为你没有使用Request     use Illuminate\Http\Request;
littleqz
2015-07-01 16:29
博主你好,请问 laravel 5 中如何获取url的查询参数呢?

像下面这样:

    http://test.local/pages?lang=en

我使用下面这两种方式都获取不到:

    Route::get('/pages', function (Request $req)
    {
        var_dump(\Input::get('lang'));
        var_dump($req->input('lang'));
    });
ty0716
2015-06-29 18:10
return view('AdminHome')->withPages(Page::all());
为什么这里传递的Page::all() 到blade就是$pages的值了
naodai
2015-09-08 11:14
@ty0716:传递数据到视图

// 使用传统的方法
$view = view('greeting')->with('name', 'Victoria');

// 使用魔术方法
$view = view('greeting')->withName('Victoria');
jim
2015-06-21 10:55
看来你的域名,我就知道你和我一样闷骚,,哈哈哈,这篇文章很棒,辛苦了~

2015-06-19 00:01
博主
我刚学Laravel5
但是碰到了这个问题 就是在使用命令行创建controller的时候
php artisan make:controller Admin/AdminHomeController
  [Symfony\Component\Debug\Exception\FatalErrorException]
  syntax error, unexpected end of file

会报这个错误 不知道为什么希望博主可以回答谢谢
JohnLui
2015-06-19 13:12
@邦:这个真回答不了 我也不知道这是什么鬼
bird
2015-06-16 12:47
博主你好

访问 admin/pages/create 和 /admin/pages/2/edit 为什么会空白呢
JohnLui
2015-06-16 14:42
@bird:我怎么知道 目测debug没开
xiaohua
2015-06-12 11:26
大神,太崇拜你啦,想问问你是怎么引入bootstrap框架的啊,你没有介绍啊,我的界面没有你的效果,还有public文件夹下面的app.css文件里面的内容都是些啥啊?与你引入的bootstrap文件有啥关系?搞晕了,大神求支招啊
JohnLui
2015-06-12 11:48
@xiaohua:引入 boostrap 需要引入 jquery、bootstrap.css、bootstrap.js 三个文件。
xiaohua
2015-06-12 13:18
@JohnLui:大神,你的app.css里面的内容怎么有bootstrap的里面定义的东西啊?,之前学过一点bootstrap,所以不是很明白你怎么引入的bootstrap,我在你的less文件夹下面发现了bootstrap。求教!
JohnLui
2015-06-12 13:27
@xiaohua:那是 Laravel 5 自带的。。。
黑白
2015-06-14 21:45
@JohnLui:我问下那个bootstrap还要手动引入吗?上面你说的这三个文件
JohnLui
2015-06-14 21:56
@xiaohua:Laravel 5 的教程里面并没有使用 BootStrap 的js,貌似默认的 app.css 里面编译进去了 bootstrap.css。
黑白
2015-06-15 23:16
@JohnLui:我再问一下,laravel里面的样式 还要写单独的css文件吗?就是前端页面的布局属性
JohnLui
2015-06-15 23:58
@xiaohua:没听懂
黑白
2015-06-16 21:16
@JohnLui:就是 <div class=" "></div> class 不是在 css 里面定义的吗 这些是自己定义的还是系统已经定义好的啊?
吽迩
2015-06-11 22:17
@JohnLui   你好,按照你的教程一步步折腾,总算到了页面输出 ,但提示模板文件有错误,还希望能指导下,谢谢

ErrorException in compiled.php line 13444:
View [app] not found. (View: C:\wamp\www\laravel\resources\views\AdminHome.blade.php)
anziguoer
2015-06-24 18:06
@吽迩:我也遇到了这个问题,不知道怎么处理啊!
bruce
2015-08-03 10:59
@anziguoer:删除叼extends和sections,这是blake的语法吧,可能缺少这哥文件,但是删除之后会出乱码以及样式乱掉,自己改吧
小菜鸟
2015-06-11 18:20
你好    我想知道你既然use App\Page   然后还调用了Page::all()  我想知道这个Page在什么位置    我找不到all方法啊
JohnLui
2015-06-11 21:01
@小菜鸟:Page 在 app/Page.php 文件。all() 由 Eloquent 类提供。
sly
2015-06-08 11:43
为什么打开输入admin网页一片空白
Qi
2015-06-06 15:57
钻了牛角尖,有点疑惑
Controller类中直接使用的view()函数怎么引入的? 在哪儿定义的?
use Redirect, Input, Auth; 这几个类具体的定义在哪儿?
求解
JohnLui
2015-06-06 16:38
@Qi:view() 就是全局函数呀

下面类的定义在 config/app.php 中可以找到,使用了别名。
MrA
2015-06-06 10:14
这种用法是个什么鬼,没见过
PagesController的store方法中:
$page = new Page;  为嘛能省略后面的括号?
MrA
2015-06-06 09:56
您好,请教个问题
<a href="{{ URL('admin/pages/'.$page->id.'/edit') }}" class="btn btn-success">编辑</a> 实现编辑功能,编辑id号为$page->id的page
路由到PagesController的edit($id)方法,将$page->id作为参数传入,
貌似过程是这样的
比较疑惑,既然要将$page->id作为参数传递给PagesController的edit($id)方法,
为何参数存在 URL('admin/pages/'.$page->id.'/edit') 这么奇怪的表示? 如何将这个$page->id解析给edit($id)方法的?
JohnLui
2015-06-06 11:05
@MrA:资源控制器会自动解析
redsword
2015-06-05 19:17
请问laravel如何在控件函数中实现多表格查询传入视图?用where函数吗?求例子
自撰一例,假设Article表中有个Atitle值且unique,我想找到Page表的title和Article表中Atitle相等的数据,然后传入视图edit处理:
use App\Page;
use App\Article;
..
public function edit($id)
    {
        return view('admin.pages.edit')->withPage(Page::find($id))->withArticle(Article::where($title,'=',Page::find($id)->title));
    }
这条语句肯定不能执行,正确的查找方式应该是怎样的呢?请博主教我。
JohnLui
2015-06-05 19:25
@redsword:这条语句可以执行呀,只是后面一条写的有问题。。。。

不过应该减少查询次数:

$page = Page::find($id);
$article = Article::where('title', $page->title)->first();

return view('admin.pages.edit')->withPage($page)->withArticle($article);
redsword
2015-06-05 19:33
@JohnLui:回复好快!
多谢释疑。where也能够连用吗?如果我要同时满足两个查询条件,比如要求title和body都相等,该怎么写?
$article = Article::where('title', $page->title)->where('body',$page->body)-->first();
JohnLui
2015-06-05 20:16
@redsword:just try it
redsword
2015-06-05 22:09
@JohnLui:不能用::,要用->
$page = Page::find($id);
$article = Article::where('title', $page->title)->where('body', $page->body)->first();
return view('admin.pages.edit')->withPage($page)->withArticle($article);
redsword
2015-06-05 11:32
create.blade.php 中 <form action="{{ URL('admin/pages') }}" method="POST"> 表示向'admin/pages'发送表单数据,
在相应的PagesController.php 的store函数中,
if ($page->save()) {
            return Redirect::to('admin');
表示如果存储成功则回到~/admin页面下。
但是我的程序在点击页面上的“新增 Page”按钮后,却跳到了“~/admin/pages/"这个地址,这是怎么回事?
PagesController和create view里的转向和表头我都是照着教程来的啊。
JohnLui
2015-06-05 11:53
@redsword:<a href="{{ URL('admin/pages/create') }}" class="btn btn-lg btn-primary">新增</a>

检查一下这句
redsword
2015-06-05 14:48
@JohnLui:多谢回复,一个类似的问题:
在AdminHome.blade.php中
<a href="{{ URL('admin/pages/'.$page->id.'/edit') }}" class="btn btn-success">编辑</a>
定义了”编辑“按钮的转向地址是带id的。
对应的PagesController.php的edit函数只简单定义了视图:
return view('admin.pages.edit')->withPage(Page::find($id));
没有”pages/“和”/edit“之间的”$page->id“。
那么当点击编辑按钮,编辑 Page的页面 http://fuck.io:88/admin/pages/1/edit 是如何知道要转向
admin.pages.edit  而不是 admin.pages.1.edit 的?

这中间的转换过程我没搞明白,试着在别的项目上实现类似功能时,得到提示 admin.pages.1.edit not found.
请问如何解决?
JohnLui
2015-06-05 18:36
@redsword: 这是个很简单的逻辑,你需要仔细观察一下。。。
小白
2015-07-27 18:33
@redsword:想通之后望指教。
fiona
2015-06-01 09:59
非常感谢您的教程
有一个问题就是,当我在使用嵌套资源控制器的时候,show($id) 这个函数传入的$id依然是第一个资源控制器的$id而不是嵌套之后的。
比如链接是 localhost/people/bob/photo/0001  people是一个资源控制器,photo是嵌套的资源控制器,在photoController里面,show($id)的$id依然是bob, 但是我想要的是0001,这个有办法解决么,谷歌没有谷歌出来。
谢谢啦
JohnLui
2015-06-01 23:13
@fiona:"photo是嵌套的资源控制器" 资源控制器不能嵌套,统一前缀可以用路由组。
初来乍到
2015-05-30 12:00
大神我们交朋友吧!我的qq号:1291492301
MisterChen
2015-05-25 20:57
我想请问这个:URL('admin/pages/'.$page->id)
这个是什么意思,有这个文件吗?
JohnLui
2015-05-25 21:19
@MisterChen:这是生成一个链接的意思,网页链接,不是下载
Kompyuter.Biz
2015-05-22 17:12
好不容易配置,终于配好了,教程一  里的所有测试都通过了,然后按教程步骤走,走到 "3. 视图" 把视图文件创建好了以后,浏览器输入http://localhost:8000/admin 页面就提示了:Page not found: /admin,然后我在输入了教程一 中的 http://localhost:8000/home 一样提示 Page not found: /home;
找来找去、不知道那出了问题?
JohnLui
2015-05-22 19:48
@Kompyuter.Biz:伪静态问题,试试 http://localhost:8000/index.php/home
Mary
2015-05-21 09:09
博主你好,我来求救
Route::controllers([                              
    'auth' => 'Auth\AuthController',
    'password' => 'Auth\PasswordController',
]);
1、这个路由怎么表示的?
2、请求:auth/login 是登入首页,那是通过这个路由控制的( 'auth' => 'Auth\AuthController',)?
3、我看了位于 Auth 下的控制器 AuthController.php, 开面并没有 渲染登入页面啊。
4、(1)控制器 AuthController.php 中引用了 “use AuthenticatesAndRegistersUsers ”,我把这句话注释了,页面出错
       (2)可是我找到对应的 “Illuminate\Foundation\Auth” 下的 “AuthenticatesAndRegistersUsers.php” ,把 “trait AuthenticatesAndRegistersUsers   ”注释了或者把整个页面注释了,为什么页面不会出错。
JohnLui
2015-05-21 15:40
@Mary:这是控制器路由:http://laravel-china.org/docs/5.0/controllers#implicit-controllers
然后你需要去了解一下 PHP 的 trait
瞌睡o0
2015-05-19 11:38
博主你好,为什么搭建laravel5成功后,进不了phpMydamin
JohnLui
2015-05-19 11:41
@瞌睡o0:
瞌睡o0
2015-05-19 11:43
@JohnLui:报错提示   NotFoundHttpException in compiled.php line 7793:
新手求指导
JohnLui
2015-05-19 11:48
@瞌睡o0:哥,给 Laravel 分配一个独立端口吧,对于你现在的水平来讲最省时间
kingopq
2015-05-17 20:02
博主你好,为什么我的页面显示的样式不是bootstrap的
JohnLui
2015-05-19 11:48
@kingopq:我也不知道呀~
xuxuxumayi
2015-05-25 18:56
@JohnLui:我要是层主,分分钟打爆楼主 - -
新手  继续学习中
Pierre
2015-05-13 00:10
@JohnLui,
edit.blade.php 照copy你的代码,点击“edit”按钮出现错误,链接指向了:
http://localhost/admin/pages12/edit
而改成http://localhost/admin/pages/12/edit则可以。

代码没有改动:
          <form action="{{ URL('admin/pages/'.$page->id) }}" method="POST">
......
请帮忙解疑。
JohnLui
2015-05-13 10:53
@Pierre:代码没有问题
Pierre
2015-05-13 11:36
@JohnLui:是的,我也觉得代码没有问题。
但在点击“编辑”的时候发现链接指向变成这个http://localhost/admin/pages12/edit(这里有疑问)。
手动将URL改成http://localhost/admin/pages/12/edit,则可以打开。
看上去像是把<form action="{{ URL('admin/pages/'.$page->id) }}" method="POST">
这里的pages后面的“/”自动给清除掉了。
不知道是我环境设置上有问题还是其他原因?
JohnLui
2015-05-13 12:21
@Pierre:我觉得更大的可能性是搞错了文件
qkl
2015-05-27 19:43
@Pierre:我也出现同样的问题
http://172.16.4.203/admin/pages/5/edit     这个就可以访问

http://172.16.4.203/admin/pages5/edit 这个直接报:
Sorry, the page you are looking for could not be found.

不知道楼主这个问题  如何解决的?


sorry,我发现了这个错误是代码抄写错误导致!
AdminHome.blade.php这个文件中:
action="{{ URL('admin/pages/'.$page->id) }}"
楼主应该少了个斜杠,在pages后
flyfish
2015-06-19 17:08
@qkl:楼主的代码没有问题。。。
戈乾
2015-05-12 22:50
大神,1,SQLSTATE[42000]: Syntax error or access violation: 1103 Incorrect table name 'pages '
            2.SQLSTATE[42000]: Syntax error or access violation: 1103 Incorrect table name 'pages ' (SQL: select count(*) as aggregate from `pages ` where `title` = 33)
这两个错误意思是表不能用么
JohnLui
2015-05-13 10:53
@戈乾:'pages ' 多了个空格。目测你在 Model 里面指定表名,多打了个空格。
luis
2015-05-07 14:47
为什么新增文章的时候:<form action="{{ URL('admin/pages') }}" method="POST">,没有指定是admin/pages下面的store方法,它就提交到这个方法了呢,是根据 public function store(Request $request)这个参数吗?是的话那我重写一个方法参数也是这样的会有问题吗?
JohnLui
2015-05-07 14:52
@luis: 看这里:http://laravel-china.org/docs/5.0/controllers#restful-resource-controllers
ZRJ
2015-05-07 09:32
$page = Page::find($id);

这一行,在 update 和 delete 方法中,不检查返回值是否为空吗?
JohnLui
2015-05-07 11:05
@ZRJ:不用检查,因为链接是之前生成的,系统里面会有数据。如果现实中出现多人同时对同一个资源进行编辑,那说明业务流程有问题
ZRJ
2015-05-07 11:06
@JohnLui:如果是手工构造的请求呢
JohnLui
2015-05-07 11:53
@ZRJ: 直接 Whoops
nickwang
2015-04-27 18:17
FatalErrorException in BooksController.php line 44: Class 'App\Http\Controllers\Admin\Input' not found
新增之后,报错了
JohnLui
2015-04-27 18:29
@nickwang:头部没有 use Input;
nickwang
2015-04-27 18:58
@JohnLui:哦哦,太粗心了,程序员大忌
蒙大拿小子
2015-04-27 10:24
报错app\Page 找不到
FatalErrorException in AdminHomeController.php line 20:
Class 'App\Page' not found
<?php
namespace App\Http\Controllers\Admin;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Page;

use Illuminate\Http\Request;

class AdminHomeController extends Controller {

    /**
     * Display a listing of the resource.
     *
     * @return Response
     */
    public function index()
    {
        //
        return view('AdminHome')->withPages(Page::all());
    }
JohnLui
2015-04-27 12:24
@蒙大拿小子:说明在教程一中你创建 Page 模型没有成功
蒙大拿小子
2015-04-27 12:36
@JohnLui:啊哈~真的是哇,感谢哈~太粗心了
redsword
2015-06-05 09:24
@JohnLui:请问怎么在laravel里判断和存储单选按钮组的值?例如:
<form action="{{ URL(admin/answer) }}" method="POST">
<input type="radio" name="Q1"  value="" />1
<input type="radio" name="Q1" value=""  />2
<input type="radio" name="Q1" value=""  />3
</form>

我怎么在控制器的store函数里得到用户的选择值并储存呢?
JohnLui
2015-06-05 11:11
@redsword:Input::get('Q1')

会得到用户选中的那个选项的 value 值。

2015-04-16 15:30
PDOException in Connector.php line 47:
SQLSTATE[HY000] [1045] Access denied for user 'homestead'@'localhost' (using password: YES)
我明明改  .env  了,为什么还是 'homestead'@'localhost'这个呢?
JohnLui
2015-04-16 15:47
@愚:看下 database.php 里面是不是获取 env 环境变量。如果确实是,可能需要配置成 “本地数据库配置”。文档:http://laravel-china.org/docs/5.0/configuration
见与不见1992
2015-04-30 10:51
@愚:你好~我也遇到了一样的问题,不过解决方案是将.env中的DB_HOST=localhost改为DB_HOST=“192.168.10.10”,现在问题暂时解决了,但是担心会因为这样的改动后期会出现其他问题,特来请教你是怎么改的?
Echol
2015-04-14 16:23
你好,请问withPages(Page::all())
这是获取整个表的数据,
假设我想倒序,或加上动态的限制条件应该怎么做呢
比如只需要某个范围内的id,并倒数或分组应该怎么做
JohnLui
2015-04-14 16:55
@Echol:排序:Page::orderBy('id', 'desc')->get();

具体请查看文档
Echol
2015-04-14 18:26
@JohnLui:请问,在AdminHomeController.php中
$pages=Page::orderBy('updated_at', 'desc')->get();
return view('AdminHome')->withPages($pages);
就ok
但如果把return改成return view('AdminHome',$pages);
会提示 Undefined variable: pages
不明白为什么
JohnLui
2015-04-14 21:10
@Echol:需要compact…
Echol
2015-04-15 23:31
@JohnLui:擦,我错
非常感谢花时间写这些教程&答疑,Thx
jinni
2015-04-09 17:29
感谢博主的教程,一步一步都还算顺利。
目前的问题是
1:新增数据commit后画面回到后台首页,数据能保存成功。
      可是新增的数据刷新不出来,一定要f5后才能显示出来。
      这是什么问题?如何解决?
2:edit按钮点下去后,Title 0这条数据会报错,
      NotFoundHttpException in compiled.php line 7755:
     其余数据都可以正常进入edit画面。

以上两个问题感觉都像是伪静态造成的,但是web方面很小白,盼回答。
JohnLui
2015-04-09 17:34
@jinni:问题1:缓存没有刷新,换浏览器解决。
问题2:NotFoundHttpException 这是 404 的意思,没有成功匹配路由。
jinni
2015-04-09 18:57
@JohnLui:谢谢博主回复
chrome清除缓存后问题2倒是解决了。。。
问题1还是存在中
Jinni
2015-04-09 19:37
@JohnLui:两个看起来都是缓存问题,再次感谢博主!
inxi
2015-04-08 16:04
有三个问题:
1:做Page的增删改查的时候,PagesController中的Redirect,input,auth为什么不用上完整的命名空间?phpstorm提示这三者都是在Illuminate\Support\Facades\下的。我使用你的方式不会有问题,加上完整的也不会有问题,但是Auth在app/http/controllers/下也有个
Auth命名空间,为什么没有完整的命名空间它不会使用到这个空间上去?我写上use App\Http\Controllers\Auth会出错。
2.代码有错误,在create,edit中,view的参数是错误的,提示view模板找不到。view的参数不就是对应模板的名字么,为什么写成admin.pages.create这种形式去了?
3.编辑的模板的名字和截图的名字对不上。。。
JohnLui
2015-04-08 16:15
@inxi:问题很好,很用心,赞一个

1. “phpstorm提示这三者都是在Illuminate\Support\Facades\下的” http://lvwenhan.com/laravel/433.html#comment-9372 这条评论解释了原理。其他的一些问题应该是你没有完全理解命名空间的各种用法导致的,推荐仔细阅读 《PHP 命名空间 解惑》 http://lvwenhan.com/php/401.html
2. admin.pages.create 这是子文件夹的意思。我在文中写了:

4.4 创建视图文件
首先在 learnlaravel5/resources/views 下创建 admin/pages 两级文件夹。
然后创建 learnlaravel5/resources/views/admin/pages/create.blade.php:

3. 教程中的代码忘了改了,我去改了。。
inxi
2015-04-09 09:59
@JohnLui:3q...后来都找到解释啦.
cheng
2015-04-04 13:25
有很多问题 >.>
因为我基本是初学者不知到怎么弄

use App\Page;
这句目标在哪里 :3

public function index()
{
  return view('AdminHome')->withPages(Page::all()); //不清楚这句
}

我什么架构都不熟悉
JohnLui
2015-04-04 13:43
@cheng:不用在意这几句是什么意思,直接用就是了,用多了,或者遇到问题了,就自然明白了。这是最高效的学习方式~
醉红颜
2015-04-03 16:04
为什么建好视图之后,输入http://localhost:8080/learnlaravel5/public/index.php/admin 会出现这个错误呢。
PDOException in E:\PHPTools\Apache2.4\Apache24\htdocs\learnlaravel5\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.php line 47:
could not find driver
新手求指教啊
JohnLui
2015-04-03 17:23
@醉红颜:难道你的本地 PHP 环境没有 PDO 这个插件
醉红颜
2015-04-07 09:23
@JohnLui:第一次配PHP环境唉。什么几乎都不懂呢。
醉红颜
2015-04-07 10:29
@JohnLui:请问,怎么修改该框架的编码格式呢?大神求解。
小狼
2015-03-30 17:07
怎么才能做到Controller传入给view的html格式变量,不被转义?
JohnLui
2015-03-30 17:41
@小狼:{!! $name !!}
见:http://laravel-china.org/docs/5.0/templates#other-blade-control-structures
clovergame
2015-03-26 17:35
首先感谢下博主为大家贡献了一份非常精彩的教程.本人菜鸟,有个疑问,crate.blade.php文件中23行
<form action="{{ URL('admin/pages') }}" method="POST">
            <input type="hidden" name="_token" value="{{ csrf_token() }}">
            <input type="text" name="title" class="form-control" required="required">
            <br>
            <textarea name="body" rows="10" class="form-control" required="required"></textarea>
            <br>
            <button class="btn btn-lg btn-info">新增 Page</button>
   </form>
这里的按钮并没有type='submit',却也能够提交表单,并且在实际的网页源代码中出现了bootstrap和jquery的js文件,请问这些是怎么做到的,谢谢
JohnLui
2015-03-26 17:53
@clovergame:能提交表单是因为 chrome 的原因吧。。。静态文件的调用在父 view 里面。
clovergame
2015-03-27 08:21
@JohnLui:明白了,谢谢
spike
2015-03-25 14:24
小弟又来求教了。。PagesController.php里‘use Redirect, Input, Auth;’这句为什么没有路径呢。。
之前没仔细学过php,问了小白问题~
JohnLui
2015-03-25 17:04
@spike:隐藏了,参见 《PHP 命名空间 解惑》 http://lvwenhan.com/php/401.html
spike
2015-03-26 11:32
@JohnLui:查了一下下,这个是不是在\laravel\config\app.php里声明的呢。
'aliases' => [

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

'Input'     => 'Illuminate\Support\Facades\Input',

'Redirect'  => 'Illuminate\Support\Facades\Redirect',
],
spike
2015-03-26 11:46
@JohnLui:还有个小问题。。我看\laravel\vendor\laravel\framework\src\Illuminate\Support\Facades下的Input.php和Redirect.php源文件,为啥它们最开始都有一句注释呢
/**
* @see \Illuminate\Http\Request
*/
/**
* @see \Illuminate\Routing\Redirector
*/
我这么问是因为,我在教程四的CommentsController 中看你调用了Input::all()和Redirect::back()这些方法。。
但在对应的类和父类里没找到这些方法。。可是在他注释里提到的类里找到了。。

菜鸟一枚,但想搞清楚。。先多谢赐教了~
JohnLui
2015-03-26 12:46
@spike:这里:http://laravel-china.org/docs/5.0/facades
spike
2015-03-26 13:54
@JohnLui:多谢指导~一环扣一环太有意思了~
堕落到妖灬
2015-03-18 17:12
在编辑的页面中加入了<input name="_method" type="hidden" value="PUT">这一句代码  然后点击提交就会出现MethodNotAllowedHttpException in RouteCollection.php line 207:这个错误  这是什么情况?
JohnLui
2015-03-18 17:59
@堕落到妖灬:这涉及到 Laravel 底层对 PUT PATCH 等方法实现的细节,你看一下我的代码就明白了。
堕落到妖灬
2015-03-18 20:58
@JohnLui:代码和你的代码一样  但是还是报错?不知道怎么解决   小白一个  求赐教
堕落到妖灬
2015-03-18 21:00
@JohnLui:更加诡异的是删除方法里面不是也有这行代码么?<input name="_method" type="hidden" value="DELETE">为什么在删除的时候不报错呢?在更新的时候就不行了
JohnLui
2015-03-18 22:24
@堕落到妖灬:上面的 form 里要有 method="POST".
堕落到妖灬
2015-03-18 22:37
@JohnLui:<form action="{{ URL('admin/admin/'.$admin->id) }}" method="POST" role="form" class="form-horizontal">
                    <input type="hidden" name="_method" value="PUT">
                    <input type="hidden" name="_token" value="{{ csrf_token() }}">
都有的  没问题
堕落到妖灬
2015-03-18 22:45
@JohnLui:谢谢  JohnLui 是我自己把{{ URL('admin/admin/'.$admin->id) }}参数弄错了  应该是这样的
{{ URL('admin/admin/'.$admin->admin_id) }}
Salon
2015-03-17 15:32
貌似php artisan make:view 在laravel5里面没有了。有点不爽了
Salon
2015-03-17 10:50
版主您好~我从laravel4开始就留意的blog了。因为真的很有受益。
我发现你的controller也改用了view()这个方法。比起l4,l5增加了view(),redirect(),response()的方法,并且使用依赖注入的编程思想。
想问问其实view(),redirect(),response()这些如此方便的方法是在哪里来的的呢?我往下找父类没找到这些方法。不知道版主有没有研究。
谢谢版主的浏览和分享
JohnLui
2015-03-17 15:22
@Salon:其实就是以前的 Response::view() Redirect::to() Response::make() 啦
yxr
2015-03-12 10:17
在浏览器打开
FatalErrorException in AdminHomeController.php line 18: Class 'App\Http\Controllers\Admin\Page' not found

    in AdminHomeController.php line 18
    at HandleExceptions->fatalExceptionFromError(array('type' => '1', 'message' => 'Class 'App\Http\Controllers\Admin\Page' not found', 'file' => '/usr/local/nginx/html/laravel2/app/Http/Controllers/Admin/AdminHomeController.php', 'line' => '18')) in compiled.php line 1738
    at HandleExceptions->handleShutdown()
JohnLui
2015-03-12 11:44
@yxr:顶部缺少 use App\Page;
黼黻
2015-03-11 16:27
BadMethodCallException in compiled.php line 8295:
Method [show] does not exist.
好像是 method="DELETE" 这个不管用,是不是我哪里没有设置。
JohnLui
2015-03-11 17:41
@黼黻: 参考我的代码,里面有
Zreke
2015-03-12 10:55
@黼黻:在4.2章节里,修改 learnlaravel5/resources/views/AdminHome.blade.php的时候,下面这部分代码错了
<form action="{{ URL('admin/pages/'.$page->id) }}" method="DELETE" style="display: inline;">
    <button type="submit" class="btn btn-danger">删除</button>
</form>
修改成参考代码里面的,或者是在3. 章节里  视图新建 `learnlaravel5/resources/views/AdminHome.blade.php`:下面的
<form action="{{ URL('admin/pages/'.$page->id) }}" method="POST" style="display: inline;">
     <input name="_method" type="hidden" value="DELETE">
     <input type="hidden" name="_token" value="{{ csrf_token() }}">
     <button type="submit" class="btn btn-danger">删除</button>
</form>

PS:好吧,写的有点啰嗦,希望你能看的懂
JohnLui
2015-03-12 11:46
@Zreke: 实际代码更新了,教程里的代码没更新
JohnLui
2015-03-12 11:53
@Zreke: 这个 4.2 根本就是多余的,感谢你发现了这个问题
黼黻
2015-03-12 15:06
@Zreke:看到了,谢谢。
黼黻
2015-03-11 16:17
是不是没有删除功能
12
2015-03-11 03:43
JasonPHP
2015-03-09 16:03
在PageController 中 update 验证中如果只修改其中body ,而title不变 ,验证通不过··怎么修改验证条件;
JohnLui
2015-03-09 16:23
@JasonPHP:这是个 bug,代码已经更新
lewisliang82
2015-03-09 14:24
Route::get('/', 'AdminHomeComtroller@index');里面有一个错误Comtroller
JohnLui
2015-03-09 14:49
@lewisliang82:
Jason
2015-03-31 01:24
@lewisliang82:對啊, 我也找了很久才發現。
很好的教學

发表评论:

© 2011-2024 岁寒  |  Powered by Emlog