CakePHP Sms Plugin
, (*1)
Send SMS with CakePHP., (*2)
Usage
``` php
App::uses('CakeSms', 'Sms.Network/Sms');, (*3)
$CakeSms = new CakeSms('default');
$CakeSms->to('+491234567890');
$CakeSms->from('+841234567890');
$CakeSms->send('Hello world!');, (*4)
## Installation via Composer
``` javascript
"require": {
"fotografde/cakephp-sms": ">=1.0.0"
}
Configuration
Load plugin in Config/bootstrap.php, (*5)
``` php
CakePlugin::load('Sms');, (*6)
Create Config/sms.php
``` php
class SmsConfig {
public $default = array(
'transport' => 'Clickatell', // will use class ClickatellSmsTransport
);
}
Implement a transport class under Lib/Network/Sms/. We recommend implementing Xi SMS, this way for example:, (*7)
``` php
/**
* Send SMS through SMS provider Clickatell
*/, (*8)
use Xi\Sms\Gateway\ClickatellGateway;, (*9)
App::uses('AbstractSmsTransport', 'Sms.Network/Sms');, (*10)
class ClickatellSmsTransport extends AbstractSmsTransport {, (*11)
const CLICKATELL_API_ID = 'XXXX';
const CLICKATELL_USER = 'YYYY';
const CLICKATELL_PASSWORD = 'ZZZZ';
/**
* Sends an SMS Through Clickatell
* We could also consider using this library: http://github.com/arcturial/clickatell
*
* @param CakeSms $sms
* @return bool Success
*/
public function send(CakeSms $sms) {
$gw = new ClickatellGateway(
self::CLICKATELL_API_ID,
self::CLICKATELL_USER,
self::CLICKATELL_PASSWORD
);
$service = new Xi\Sms\SmsService($gw);
$msg = new Xi\Sms\SmsMessage(
$sms->message(),
self::parsePhoneNumber($sms->from()),
self::parsePhoneNumber($sms->to())
);
$response = $service->send($msg);
return !empty($response);
}
/**
* Parses a phone number to fit Clickatell requirements
* from +49123[...] to 49123[...]
*
* @param array|string $phoneNumber
* @return array|string|bool
*/
public static function parsePhoneNumber($phoneNumber) {
if (is_array($phoneNumber)) {
return array_map('self::parsePhoneNumber', $phoneNumber);
}
if (preg_match('/^\+([0-9]+)$/', (string) $phoneNumber, $matches)) {
return $matches[1];
}
return false;
}
}
```, (*12)