-
Notifications
You must be signed in to change notification settings - Fork 574
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
2016 版 Laravel 系列入门教程(三)【最适合中国人的 Laravel 教程】 #6
Comments
博主用的是哪个编辑器,用的是啥主题 |
@keaixiaou Sublime Text 3,Spacegray 主题。这个主题是编辑器主题,不是代码配色。 |
建立后台那部分,我有个疑问。按照博主的做法,新建了Admin/HomeController,但是实际上访问的依然是HomeController这个Controller,新建的Controller实际上并没有用到。删掉Admin/Controller,会抛出异常 ‘Class App\Http\Controllers\Admin\HomeController does not exist’。是不是路由那里配置有点问题?刚学Laravel,望不吝赐教!谢谢 |
@wrh910201 Admin/HomeController 中间的 Admin 部分写在了路由组里,并不是“新建的Controller实际上并没有用到” |
当我访问fuck.io/admin这个url的时候,我在ControllerDispatcher.php这个文件var_dump($controller),输出的是string(35) "App\Http\Controllers\HomeController"。在Admin/HomeController的index()方法里修改页面没有变化,在HomeController的index()方法修改页面相应变化。 |
@wrh910201 明白了哈哈,你这个应该就是 Route::group 里面 namespace 设置的问题 |
@johnlui |
@lin1987 因为用的是绝对命名空间 public function index()
{
return view('home')->withArticles(\App\Article::all());
} |
谢谢博主,理解了,教程一中讲到,在使用 Artisan 工具新建 Model 类时,这个类文件中创建了 命名空间 \App。 |
auth 可以绑定2个model吗 ? 就是后台管理员登录走admins表 前台用户登录走 users表。 |
public function index() 这里的withArticles是哪里定义的?我翻遍了所有代码都找不到定义,是语法糖么? 该如何理解? 还有其他的写法吗? 这种写法感觉很奇怪的样子。。。 更新 一下 return view('home')->with('Articles', \App\Article::all()); 这样写貌似好理解多了,新手勿嘲 |
我在使用Auth的时候 更改验证后的跳转 protected $redirectTo = 'admin'; 但是登录过后 就是循环重定向。没有进入到 后台管理页面。前面流程都很顺畅。希望有楼主能解答下! |
同问,withArticles的用法。 |
我也是,在使用Auth的时候跳转 protected $redirectTo = 'admin'; 但是登录过后 ,就是循环重定向 |
@liuhaochuan1 这个好像写错了吧return view('home')->with('Articles', \App\Article::all()); |
@wuhuifeng 尝试了一下 确实是需要小写才正常 第一个参数应该是渲染到blade模板的变量名称 |
5.3中没有AuthController该如何配置呢? |
@Jyhwenchai 有loginController |
博主,按照你的教程做到路由群组那里,无论怎么登录,在登录后都会跳转到/login,已在authcontroller里绑定了跳转到admin。另外,如果我单独输入/admin会直接跳转到/。而路由群组那里我已经用了prefix。求指教 |
@zl02655931 你可能没登录成功 |
你好,我遇到了和上面wrh910201同样的问题,根据你的步骤,localhost:8000/admin会跳到下面 |
同问,withArticles的用法!拜托了. |
@kongcheng123 感觉是中间件的问题,你有没有检查过你的 app/Http/Controllers/Middleware/Authenticate.php文件? |
@wrh910201 @kongcheng123 我遇到了和你们同样的问题,根据你的步骤,localhost:8000/admin会跳到下面 你们的问题解决了吗? |
|
Route::group(['middleware' => ['web','auth'], 'namespace' => 'Admin', 'prefix' => 'admin'], function() {
}); |
@T4mo 感谢你啦,我重来一次居然成功了。 |
Route::group(['namespace' => 'Admin', 'prefix' => 'admin'], function() { |
@wenju319 我是这样的 Route::group(['middleware' => ['auth'],'namespace' => 'Admin', 'prefix' => 'admin'], function () { |
资瓷一下。 |
后台那个页面是用的模板还是原生写的啊? |
@PleaseCallMeXiuye @uchiyou @netcan @liuhaochuan1
其中,Str::snake是一个字符串处理函数,作用是
所以实际上 |
关于
上面代码里那个 |
好教程,非常感谢。 这里少了一个 body 麻烦帮忙加上。 调整视图
··· |
@HanielF 没用 php -S 启动吧?你遇到的是伪静态问题:127.0.0.1/index.php/admin 可解 |
@johnlui Thank you very much . It works. |
新版本的一直没有找到AuthController,原来是在Controllers/Auth/LoginController.php 文件中定义登陆成功后跳转。 |
@developbiao 基于 Laravel 5.5 的 2017 版教程正在快马加鞭地编写,敬请期待~ |
在本篇文章中,我们将尝试构建一个带后台的简单博客系统。我们将会使用到 路由、MVC、Eloquent ORM 和 blade 视图系统。
简单博客系统规划
我们在教程一中已经新建了一个 Eloquent 的 Model 类 Article,使用 migration 建立了数据表并使用 seeder 填入了测试数据。我们的博客系统暂时将只管理这一种资源:后台需要使用账号密码登录,进入后台之后,可以新增、修改、删除文章;前台显示文章列表,并在点击标题之后显示出文章全文。
下面我们正式开始。
搭建前台
前台的搭建是最简单的,我先带领大家找找感觉。
修改路由
删掉
将 /home 那一行修改为
Route::get('/', 'HomeController@index');
,现在我们系统的首页就落到了 App\Http\Controllers\HomeController 类的 index 方法上了。查看 HomeController 的 index 函数
learnlaravel5/app/Http/Controllers/HomeController.php
的 index 函数只有一行代码:return view('home');
,这个很好理解,返回名字叫 home 的视图给用户。这个视图文件在哪里呢?在learnlaravel5/resources/views/home.blade.php
,blade 是 Laravel 视图系统的名字。blade 浅析
blade 会对视图文件进行预处理,帮我们简化一些重复性很高的 echo、foreach 等 PHP 代码。blade 还提供了一个灵活强大的视图组织系统。打开 home.blade.php :
@extends('layouts.app')
这表示此视图的基视图是
learnlaravel5/resources/views/layouts/app.blade.php
。这个函数还隐含了一个小知识:在使用名称查找视图的时候,可以使用 . 来代替 / 或 \。@section('content') ... @endsection
这两个标识符之间的代码,会被放到基视图的
@yield('content')
中进行输出。访问首页
访问 http://fuck.io:1024 ,不出意外的话,你会看到这个页面:
为什么需要登录呢?怎么去掉这个强制登录呢?删掉 HomeController 中的构造函数即可:
这个函数会在控制器类初始化的时候自动载入一个名为 auth 的中间件,正式这一步导致了首页需要登录。删除构造函数之后,重新访问 http://fuck.io:1024 ,页面应该就会直接出来了。这里要注意两点:① 一定要重新访问,不要刷新,因为此时页面的 url 其实是 http://fuck.io:1024/login ② 这个页面跟之前的欢迎页虽然看起来一毛一样,但其实文字是不同的,注意仔细观察哦。
向视图文件输出数据
既然 Controller - View 的架构已经运行,下一步就是引入 Model 了。Laravel 中向视图传数据非常简单:
修改视图文件
修改视图文件
learnlaravel5/resources/views/home.blade.php
的代码为:刷新
如果你得到以上页面,恭喜你,Laravel 初体验成功!
调整视图
前台页面是不应该有顶部的菜单栏的,特别是还有注册、登录之类的按钮。修改视图文件为:
此视图文件变成了一个独立视图,不再有基视图,并且将 jQuery 和 BootStrap 替换为了国内的 CDN,更快更稳定了。
同理我们修改
learnlaravel5/resources/views/layouts/app.blade.php
为如下代码:接下来我们来着手搭建后台。
搭建后台
生成控制器
我们使用 Artisan 工具来生成控制器文件:
成功之后,我们就可以看到 artisan 帮我们建立的文件夹及控制器文件了:
增加路由
我们要使用路由组来将后台页面置于“需要登录才能访问”的中间件下,以保证安全:
上一篇文章中我们已经接触到了路由组,这是 Laravel 的另一个伟大创造。路由组可以给组内路由一次性增加 命名空间、uri 前缀、域名限定、中间件 等属性,并且可以多级嵌套,异常强大。路由组中文文档在此:http://laravel-china.org/docs/5.1/routing#route-groups
上面的三行代码的功能简单概括就是:访问这个页面必须先登录,若已经登录,则将
http://fuck.io:1024/admin
指向 App\Http\Controllers\Admin\HomeController 的 index 方法。其中需要登录由 middleware 定义, /admin 由 prefix 定义,Admin 由 namespace 定义,HomeController 是实际的类名。构建后台首页
新建 index 方法
新建视图文件
在
learnlaravel5/resources/views/
目录下新建一个名为 admin 的文件夹,在 admin 内新建一个名为 home.blade.php 的文件,填入代码:修改 Auth 系统登陆成功之后的跳转路径
修改
learnlaravel5/app/Http/Controllers/Auth/AuthController.php
中的相应代码为:尝试登录
访问 http://fuck.io:1024/admin ,它会跳转到登陆界面,输入邮箱和密码之后,你应该会看到如下页面:
恭喜你,后台首页搭建完成!下面我们开始构建 Article 的后台管理功能。
构建 Article 后台管理功能
让我们先尝试点一下 “管理文章”按钮,不出意外你将得到一个 404 的报错:
进步之道
很多新手看到这个报错直接就慌了:什么鬼?全是英文看不懂呀。然后在文章下面把完整的错误栈全部粘贴出来。老实说我第一次见到 Laravel 报这个错也是完全没耐心去读,不过我还是复制了最明显的那个词“NotFoundHttpException”去 Google 了一下,从此我就再也没搜索过它了。
我为我的浮躁感到羞愧。那句话说的太对了:大多数人的努力程度之低,完全没有到拼天赋的程度。愿本教程的读者都做“少数人”。
添加路由
404 错误是访问了系统没有监听的路由导致的。下面我们要添加针对
http://fuck.io:1024/admin/article
的路由:刷新,错误变了:
新建控制器
上图中的报错是控制器不存在。我们使用 Artisan 来新建控制器:
刷新,错误又变了:
index 方法不存在。让我们新增 index 方法:
新建视图
上面我们已经新建过视图,现在应该已经轻车熟路了。在
learnlaravel5/resources/views/admin
下新建 article 文件夹,在文件夹内新建一个 index.blade.php 文件,内容如下:刷新,错误又变了:
Article 类不存在?原因很简单:Article 类和当前控制器类不在一个命名空间路径下,不能直接调用。解决办法就是主动导入 \App\Article 类:
如果你还不熟悉命名空间,可以参考《PHP 命名空间 解惑》。
检查成果
再次刷新,你应该能看到如下画面:
如果你没到这个画面也不用担心,根据他的错误提示去 Google 吧,一定能解决的。
新增、编辑、删除功能怎么办?
这三个功能我将在下一篇教程与大家分享,这是 2015 版 Laravel 教程做的不够好的地方,其实这里才是最应该掰开揉碎仔细讲解的地方。
The text was updated successfully, but these errors were encountered: