言十年的博客

上善若水,水善利萬物而不爭

物盡其用!人盡其才!兩全其美!


Laravel5.2框架使用Two

开发环境mb pro,laravel (v5.2.29)

查看代码

##控制器Controller

/app/Http/Controllers下面建立一个ArticleController.php

<?php
namespace App\Http\Controllers;

class ArticleController extends Controller {
	public function index() {
		return "文章index";
	}
}

访问http://localhost:8000/article。你发现显示的并不是文章index。而是之前配置的路由指向的模板。要想显示文档index。重新配置一下路由。

Route::get('article', "ArticleController@index");

把上一节的路由传递的数据,用的子模板都统统写过来。就ok了!

return view('article.article',['content'=>'今天填上掉了很多橙子'])->nest('listview', 'article.listview', ['articleCatName'=> '养生系列']);

我们的后台的文章功能有增删改查。再添加三个方法。

public function add() {
	return '增';
}
public function delete() {
	return '删';
}
public function update() {
	return '改';
}

配置对应功能

#后台文章模块
Route::get('article', "ArticleController@index");
Route::get('article/add', "ArticleController@add");
Route::get('article/delete', "ArticleController@delete");
Route::get('article/update', "ArticleController@update");

配置完之后,我用get的方式测试下。都ok!

但,上面的写法是以前我看thinkphp教程的惯常思维。那么在 laravel里面就不要这么写了。要符合laravel的restful风格(restful-controllers)。

add变成create、delete变成destroy、update还是update。

我们把配置那么多路由全部干掉。换成下面的。

Route::resource('article', 'ArticleController');

注意:说到这里补充一点。如果你用命令行创建php artisan make:controller PhotoController --resource。就自动帮你把方法都创建好了。

在views下面的article文件夹下面,写一个create.blade.php用于添加文章。

文章

点击提交的时候,post到store(store对应的post路由是article)的方法中。我们看到store方法有个参数是$request。$request对象保存一些请求的信息。我们试着在里面打印一下。

echo $request->path(); // article
echo $request->url(); // http://localhost:8000/article
echo $request->fullurl(); // http://localhost:8000/article
$request->isMethod('post'); // 验证是否是post请求
echo $request->input('title'); // 乔布斯回归
echo $request->content; // 乔布斯携iPhone7回归。堪称上帝之作

更详细$request的方法,比如接收请求的发来的参数。参见HTTP Requests

##数据库操作

我们有了create.blade.php模板添加article。也有了restful的方法。那么,简单的了解之后,我们开始创建对应的数据库。对应的表格。

###mac终端建表

CREATE DATABASE weixin;

CREATE TABLE IF NOT EXISTS `wx_article` (
`article_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID号',
`title` varchar(150) NOT NULL COMMENT '文章题目',
`content` longtext NOT NULL COMMENT '文章内容',
PRIMARY KEY (`article_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='文章内容表'  ;

###链接数据库

./app/config/datase.php。默认是`‘default’ => ‘mysql’。改好配置文件

.......
'host'      => env('DB_HOST', 'localhost'),
'database'  => env('DB_DATABASE', 'weixin'),
'username'  => env('DB_USERNAME', 'root'),
'password'  => env('DB_PASSWORD', '123456'),
.........

随便写一个路由,测试链接情况

Route::get('linkdb', function () {
    echo DB::connection()->getDatabaseName();
});

打开http://localhost:8000/linkdb 。额?打印出来的竟然是homestead。这是什么鬼?laravel 应该是建议你用homestead(运行环境具体看homestead,了解laravel的开发,我会搭建环境。暂时按照惯性思维的做法,土鳖的做法。)

可是我们要链接weixin这个数据库。

env('DB_HOST', 'localhost')中改成localhost。密码了,用户名。都改掉。再运行我们发现,ok!

###添加article数据

继续编辑 ArticleController.php。首先进行数据库的操作。先在类的顶端 加上use DB;,否则,执行insert或者select会报Fatal error: Class 'App\Http\Controllers\DB' not found。不过这不是什么问题。我们已经养成习惯,找不到,就说明没引入。

给store方法中添加如下代码:

if (DB::insert('insert into wx_article (title, content) values (?, ?)', [$request->title, $request->content])) {
    echo "插入成功";
} else {
    echo "插入失败";
}

打开 http://localhost:8000/article/create

ok,返回true。插入成功。打开数据库看看情况。ok!

*************************** 1. row ***************************
article_id: 1
     title: 乔布斯归来
   content: iPhone天堂之作。
继4s之后乔布斯又一大作。


*************************** 2. row ***************************
article_id: 2
     title: 外星人超光速飞行来到中国
   content: 外星酋长接见习近平
2 rows in set (0.00 sec)

ok!两条数据。通常我们添加之后。会返回添加的页面(或者列表)对吧!ok,那这里使用一个重定向的方法。那就别echo "成功了";改成return redirect('article');(列表界面)。

###实现列表界面

刚才添加几条数据,添加成功返回的是列表界面。列表的遍历就写在了index.blade.php里面。正好在这个页面,对前篇文章的blade模板标签,还有数据传值再回顾下。

在index方法中添加一下代码,获取数据并传递数据:

$articleList = DB::select('select * from wx_article');
return view('article.index')->with("articleList", $articleList);

index.blade.php模板这样去写。

@foreach ($articleList as $article)
	<tr> 
	<td></td>
	<td></td>
	<td></td>
	<td><a href="/">修改</a></td>
	<td><a href="/">删除</a></td>
	</tr>
@endforeach

效果如下:

列表

###删除数据

其实删除数据是通过http的delete方法,而不是get。所以上面的代码:

<td><a href="/">删除</a></td>

改成下面:

<td>
   {!! Form::open(['method' => 'DELETE', 'route' => ['article.destroy', $article->article_id]]) !!}
   <a href="javascript:;" onclick="document.forms[].submit()">删除</a>
    {!! Form::close() !!}
</td>

控制器中在destroy中添加如下代码:

if (DB::delete('delete from wx_article where article_id= ? ', [$id])) {
    return redirect('article');
} else {
    echo "删除失败";
}

参考资料:

分享到