これは私のカスタム検証関数です。Google Maps CodeIgniterライブラリのジオコーディングを使用して、場所が存在するかどうかを確認します。
public function address_check($str)
{
$this->load->library('GMap');
$this->gmap->GoogleMapAPI();
// this method checks the cache and returns the cached response if available
$geocodes = $this->gmap->getGeoCode("{$str}, United States");
$this->form_validation->set_message('address_check', 'The %s field contains an invalid address');
if (empty($geocodes))
{
return FALSE;
}
else
{
return TRUE;
}
}
上記の関数を次のルールに従ってコントローラー内に配置すると、完全に機能します。
$this->load->library('form_validation');
$this->form_validation->set_rules('location', 'Location', 'callback_address_check');
今、私はそれをコントローラーから移動したいだけです。そのため、このSO回答とCIドキュメントに従って、CodeIgniterフォーム検証ライブラリを拡張しようとしています。
ここでファイルを作成しました /codeigniter/application/libraries/MY_Form_validation.php
::
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class MY_Form_validation extends CI_Form_validation {
public function __construct()
{
parent::__construct();
}
public function address_check($str)
{
$this->load->library('GMap');
$this->gmap->GoogleMapAPI();
// this method checks the cache and returns the cached response if available
$geocodes = $this->gmap->getGeoCode("{$str}, United States");
$this->form_validation->set_message('address_check', 'The %s field contains an invalid address');
if (empty($geocodes))
{
return FALSE;
}
else
{
return TRUE;
}
}
}
そして、コントローラー内から、次のようなルールを設定しています...
$this->load->library('form_validation');
$this->form_validation->set_rules('location', 'Location', 'address_check');
私が見つけて自分で解決した最初の問題は、SOの回答My_Form_validation.php
でファイル名が本来あるべき場所に誤って指定されていたため、何も起こらなかったことです。MY_Form_validation.php
関数が呼び出されているので、新しい問題は次のエラーが発生することです。
メッセージ:未定義のプロパティ:MY_Form_validation :: $ load
ファイル名:libraries / MY_Form_validation.php
行番号:12
これは12行目です。
$this->load->library('GMap');
ライブラリ内からライブラリにアクセスできませんか?これを修正する適切な方法は何ですか?GMapライブラリを常に使用することはないので、GMapライブラリを自動ロードしたくないです。私の方法に他の問題はありますか?