# 自定義菜單 - 創建菜單
創建自定義菜單需要注入 AccessToken,創建菜單前需要先定義菜單。
## 定義菜單
```php
use Thenbsp\Wechat\Menu\Button;
use Thenbsp\Wechat\Menu\ButtonCollection;
// 一級菜單
$button = new Button('菜單名稱', '菜單類型', '菜單值');
// 菜單集合
$buttonCollection = new ButtonCollection('菜單名稱');
$buttonCollection->addChild($button);
```
菜單的值因菜單類型不同而不同,具體分為 key/url/media_id,菜單類型包括:
- view
- click
- scancode_push
- scancode_waitmsg
- pic_sysphoto
- pic_photo_or_album
- pic_weixin
- location_select
- media_id
- view_limited
一級菜單不能超過 3 個,子菜單不能超過 5 個。
```php
use Thenbsp\Wechat\Menu\Button;
use Thenbsp\Wechat\Menu\ButtonCollection;
// 包含子菜單的按鈕
$button1 = new ButtonCollection('菜單一');
$button1->addChild(new Button('點擊', 'click', 'key_1'));
$button1->addChild(new Button('打開網頁', 'view', 'http://www.163.com/'));
$button1->addChild(new Button('掃碼', 'scancode_push', 'key_2'));
// 包含子菜單的按鈕
$button2 = new ButtonCollection('菜單二');
$button2->addChild(new Button('系統拍照發圖', 'pic_sysphoto', 'key_3'));
$button2->addChild(new Button('拍照或者相冊發圖', 'pic_photo_or_album', 'key_4'));
$button2->addChild(new Button('微信相冊發圖', 'pic_weixin', 'key_5'));
// 一級菜單
$button3 = new Button('菜單三', 'location_select', 'key_6');
```
## 創建菜單
```php
use Thenbsp\Wechat\Menu\Create;
$create = new Create($accessToken);
$create->add($button1);
$create->add($button2);
$create->add($button3);
try {
$create->doCreate();
} catch (Exception $e) {
exit($e->getMessage());
}
var_dump('菜單已創建成功');
```