spoolphiz/events

此包的最新版本(dev-master)没有可用的许可证信息。

dev-master 2015-01-14 23:54 UTC

This package is not auto-updated.

Last update: 2024-09-24 05:36:04 UTC


README

#Laravel 4 事件注册系统

一个提供创建事件、场地、参会者和讲师功能的包。本文档仍在不断完善中。

设置

使用 composer 安装,并将以下条目添加到 app/config/app.php 中找到的服务提供者数组中

'Spoolphiz\Events\EventsServiceProvider',

然后,更新自动加载文件

composer.phar dump-autoload

最后,运行所有迁移以创建必要的数据库表

php artisan migrate --package=spoolphiz/events

##用法

本包旨在作为 RESTFul API 的一部分使用。以下是一些示例

###API 资源路由

###处理场地

建议通过对应的存储库类与模型交互。这意味着将场地存储库注入到您的控制器中

use \Input;
use \Response;
use Spoolphiz\Events\Interfaces\VenueRepository;

class ApiVenuesController extends ApiBaseController {

	protected $venue;
	
	public function __construct(VenueRepository $venue)
	{
		$this->venue = $venue;
	}
...
}

现在让我们创建一个用于添加新场地的控制器函数

/**
 * Create a new venue
 *
 * @return Response (json)
 */
public function postCreate()
{	
	$venue = $this->venue->newVenue();
	$inputData = Input::get();
	$venue->fill($inputData);
	$venue->validate();
	
	//since validation passed, lets geocode this address
	$venue->geocode();

	if (!$venue->save())
	{
		App::abort(422, 'Resource failed to create');
	}

	return Response::json($venue->toArray());
}

更新场地与添加类似

/**
 * Update a venue's info
 *
 * @return Response (json)
 */
public function putSingle($id)
{	
	$venue = $this->venue->find($id);
	$venue->fill(Input::get());
	$venue->validate();

	$venue->geocode();

	if (!$venue->save())
	{
		App::abort(422, 'Resource failed to updated');
	}

	return Response::json($venue->toArray());
}

...那么,如何获取所有场地的列表呢?

/**
 * Get a listing of venues
 *
 * @return Response (json)
 */
public function getList()
{		
	$filters = Input::get();
	
	if( empty($filters) )
	{
		$data = $this->venue->all();
	}
	else
	{
		$data = $this->venue->filtered($this->parseFilters($filters));
	}
	
	
	if( empty($data) )
	{
		$data = array();
	}
	elseif( is_object($data) ) {
		$data = $data->toArray();
	}
	
	return Response::json($data);
}

注意 getList() 开头有对输入数据的检查,搜索/过滤数据将在下面的“搜索/过滤数据”部分中介绍

###搜索/过滤数据

以下功能可以作为过滤字段传入。如果在一个单页面应用中工作,应该对每个过滤变量调用 JSON.stringify()。这意味着您还需要在服务器端解码过滤字段。如果您不是将此包作为 API 的一部分使用,可以简单地创建一个具有与以下相同结构的关联数组,并将其传递给每个资源存储库(场地、事件、用户、参会者)的 filtered() 函数。

{
	total : 0|1 //returns the count of events matching the rest of the filter criteria
	filter : { 
				type : "AND"|"OR", //it is currently not possible to mix AND and OR in the same query
				filter : [
							{
								name : "events.start_date",
								operator: ">=" //possible operators are: =, !=, <, <=, >, >=, in, not in, starts with, ends with, contains, not contains, search
								value : "2014-02-02"
							}
							//add more field queries here
						]
			},
	sort : [
				{field : "venues.city", dir : "ASC"} //you can add more fields to sort by, format is table_name.field_name
			],
	fields : ["events.*", "venues.city"], //this should contain an array of fields to return in format of table_name.field_name or table_name.*
	limit : 10, //number of results you want
	page : 0 //0 based page number for results that contain more records than requested in the 'limit' field above
}