Skip to content

Commit

Permalink
Update docs for version 5.0 (#397)
Browse files Browse the repository at this point in the history
* Fixed broken links/404s
* Fixed broken doc links
* Fixed broken doc links
* Upgrade docusaurus to latest version
* Add 5.0 to changelog
* Version 5.0 in docs
  • Loading branch information
oojacoboo committed Oct 25, 2021
1 parent 5b1ea87 commit 81b631b
Show file tree
Hide file tree
Showing 41 changed files with 7,685 additions and 4 deletions.
6 changes: 6 additions & 0 deletions website/docs/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,12 @@ title: Changelog
sidebar_label: Changelog
---

## 5.0.0

#### Dependencies:

- Upgraded to using version 14.9 of [webonyx/graphal-php](https://github.com/webonyx/graphql-php)

## 4.3.0

#### Breaking change:
Expand Down
6 changes: 2 additions & 4 deletions website/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,10 @@
"deploy": "bin/deploy-github"
},
"devDependencies": {
"@docusaurus/core": "2.0.0-beta.5",
"@docusaurus/preset-classic": "2.0.0-beta.5"
},
"dependencies": {
"@docusaurus/core": "2.0.0-beta.5",
"@docusaurus/preset-classic": "2.0.0-beta.5",
"@docusaurus/core": "2.0.0-beta.8",
"@docusaurus/preset-classic": "2.0.0-beta.8",
"clsx": "^1.1.1",
"mdx-mermaid": "^1.1.0",
"mermaid": "^8.12.0",
Expand Down
123 changes: 123 additions & 0 deletions website/versioned_docs/version-5.0/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
---
id: changelog
title: Changelog
sidebar_label: Changelog
---

## 5.0.0

#### Dependencies:

- Upgraded to using version 14.9 of [webonyx/graphal-php](https://github.com/webonyx/graphql-php)

## 4.3.0

#### Breaking change:

- The method `setAnnotationCacheDir($directory)` has been removed from the `SchemaFactory`. The annotation
cache will use your `Psr\SimpleCache\CacheInterface` compliant cache handler set through the `SchemaFactory`
constructor.

#### Minor changes:

- Removed dependency for doctrine/cache and unified some of the cache layers following a PSR interface.
- Cleaned up some of the documentation in an attempt to get things accurate with versioned releases.

## 4.2.0

#### Breaking change:

The method signature for `toGraphQLOutputType` and `toGraphQLInputType` have been changed to the following:

```php
/**
* @param \ReflectionMethod|\ReflectionProperty $reflector
*/
public function toGraphQLOutputType(Type $type, ?OutputType $subType, $reflector, DocBlock $docBlockObj): OutputType;

/**
* @param \ReflectionMethod|\ReflectionProperty $reflector
*/
public function toGraphQLInputType(Type $type, ?InputType $subType, string $argumentName, $reflector, DocBlock $docBlockObj): InputType;
```

#### New features:

- [@Input](annotations-reference.md#input-annotation) annotation is introduced as an alternative to `@Factory`. Now GraphQL input type can be created in the same manner as `@Type` in combination with `@Field` - [example](input-types.mdx#input-annotation).
- New attributes has been added to [@Field](annotations-reference.md#field-annotation) annotation: `for`, `inputType` and `description`.
- The following annotations now can be applied to class properties directly: `@Field`, `@Logged`, `@Right`, `@FailWith`, `@HideIfUnauthorized` and `@Security`.

## 4.1.0

#### Breaking change:

There is one breaking change introduced in the minor version (this was important to allow PHP 8 compatibility).

- The **ecodev/graphql-upload** package (used to get support for file uploads in GraphQL input types) is now a "recommended" dependency only.
If you are using GraphQL file uploads, you need to add `ecodev/graphql-upload` to your `composer.json`.

#### New features:

- All annotations can now be accessed as PHP 8 attributes
- The `@deprecated` annotation in your PHP code translates into deprecated fields in your GraphQL schema
- You can now specify the GraphQL name of the Enum types you define
- Added the possibility to inject pure Webonyx objects in GraphQLite schema

#### Minor changes:

- Migrated from `zend/diactoros` to `laminas/diactoros`
- Making the annotation cache directory configurable

#### Miscellaneous:

- Migrated from Travis to Github actions


## 4.0.0

This is a complete refactoring from 3.x. While existing annotations are kept compatible, the internals have completely
changed.

#### New features:

- You can directly [annotate a PHP interface with `@Type` to make it a GraphQL interface](inheritance-interfaces.mdx#mapping-interfaces)
- You can autowire services in resolvers, thanks to the new `@Autowire` annotation
- Added [user input validation](validation.mdx) (using the Symfony Validator or the Laravel validator or a custom `@Assertion` annotation
- Improved security handling:
- Unauthorized access to fields can now generate GraphQL errors (rather that schema errors in GraphQLite v3)
- Added fine-grained security using the `@Security` annotation. A field can now be [marked accessible or not depending on the context](fine-grained-security.mdx).
For instance, you can restrict access to the field "viewsCount" of the type `BlogPost` only for post that the current user wrote.
- You can now inject the current logged user in any query / mutation / field using the `@InjectUser` annotation
- Performance:
- You can inject the [Webonyx query plan in a parameter from a resolver](query-plan.mdx)
- You can use the [dataloader pattern to improve performance drastically via the "prefetchMethod" attribute](prefetch-method.mdx)
- Customizable error handling has been added:
- You can throw [many errors in one exception](error-handling.mdx#many-errors-for-one-exception) with `TheCodingMachine\GraphQLite\Exceptions\GraphQLAggregateException`
- You can force input types using `@UseInputType(for="$id", inputType="ID!")`
- You can extend an input types (just like you could extend an output type in v3) using [the new `@Decorate` annotation](extend-input-type.mdx)
- In a factory, you can [exclude some optional parameters from the GraphQL schema](input-types#ignoring-some-parameters)


Many extension points have been added

- Added a "root type mapper" (useful to map scalar types to PHP types or to add custom annotations related to resolvers)
- Added ["field middlewares"](field-middlewares.md) (useful to add middleware that modify the way GraphQL fields are handled)
- Added a ["parameter type mapper"](argument-resolving.md) (useful to add customize parameter resolution or add custom annotations related to parameters)

New framework specific features:

#### Symfony:

- The Symfony bundle now provides a "login" and a "logout" mutation (and also a "me" query)

#### Laravel:

- [Native integration with the Laravel paginator](laravel-package-advanced.mdx#support-for-pagination) has been added

#### Internals:

- The `FieldsBuilder` class has been split in many different services (`FieldsBuilder`, `TypeHandler`, and a
chain of *root type mappers*)
- The `FieldsBuilderFactory` class has been completely removed.
- Overall, there is not much in common internally between 4.x and 3.x. 4.x is much more flexible with many more hook points
than 3.x. Try it out!
120 changes: 120 additions & 0 deletions website/versioned_docs/version-5.0/README.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
---
id: index
title: GraphQLite
slug: /
sidebar_label: GraphQLite
---

import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';

<p align="center">
<img src="https://graphqlite.thecodingmachine.io/img/logo.svg" alt="GraphQLite logo" width="250" height="250" />
</p>


A PHP library that allows you to write your GraphQL queries in simple-to-write controllers.

## Features

* Create a complete GraphQL API by simply annotating your PHP classes
* Framework agnostic, but Symfony, Laravel and PSR-15 bindings available!
* Comes with batteries included: queries, mutations, mapping of arrays / iterators, file uploads, security, validation, extendable types and more!

## Basic example

First, declare a query in your controller:

<Tabs
defaultValue="php8"
values={[
{label: 'PHP 8', value: 'php8'},
{label: 'PHP 7', value: 'php7'},
]}>
<TabItem value="php8">

```php
class ProductController
{
#[Query]
public function product(string $id): Product
{
// Some code that looks for a product and returns it.
}
}
```

</TabItem>
<TabItem value="php7">

```php
class ProductController
{
/**
* @Query()
*/
public function product(string $id): Product
{
// Some code that looks for a product and returns it.
}
}
```

</TabItem>
</Tabs>

Then, annotate the `Product` class to declare what fields are exposed to the GraphQL API:

<Tabs
defaultValue="php8"
values={[
{label: 'PHP 8', value: 'php8'},
{label: 'PHP 7', value: 'php7'},
]}>
<TabItem value="php8">

```php
#[Type]
class Product
{
#[Field]
public function getName(): string
{
return $this->name;
}
// ...
}
```

</TabItem>
<TabItem value="php7">

```php
/**
* @Type()
*/
class Product
{
/**
* @Field()
*/
public function getName(): string
{
return $this->name;
}
// ...
}
```

</TabItem>
</Tabs>

That's it, you're good to go! Query and enjoy!

```graphql
{
product(id: 42) {
name
}
}
```
Loading

0 comments on commit 81b631b

Please sign in to comment.