コンクリートファイブジャパン 菱川です。
Ajaxなどの処理のためにconcrete5に独自のルーティングを追加することができます。application/bootstrap/app.php を使って簡易に追加することもできますが(このファイルにコメントで作例があります)、パッケージから追加することも可能です。
まず、パッケージの controller.php の on_start() メソッドでルーティングを追加します。
コンクリートファイブジャパン 菱川です。
Ajaxなどの処理のためにconcrete5に独自のルーティングを追加することができます。application/bootstrap/app.php を使って簡易に追加することもできますが(このファイルにコメントで作例があります)、パッケージから追加することも可能です。
まず、パッケージの controller.php の on_start() メソッドでルーティングを追加します。
<?php
// packages/ajax_example/controller.php
namespace Concrete\Package\AjaxExample;
use Concrete\Core\Package\Package;
use Route;
class Controller extends Package
{
protected $pkgHandle = 'ajax_example';
protected $appVersionRequired = '5.7.5';
protected $pkgVersion = '0.1';
public function getPackageDescription()
{
return t('Example Package');
}
public function getPackageName()
{
return t('Ajax Example');
}
public function on_start()
{
Route::register('/ccm/foo', '\Concrete\Package\AjaxExample\Controller\Foo::view');
Route::register('/ccm/foo/bar', '\Concrete\Package\AjaxExample\Controller\Foo::barAction');
}
}
対応するコントローラーの作例です。Ajaxヘルパーを使って、jsonを出力しています。
<?php
// packages/ajax_example/controllers/foo.php
namespace Concrete\Package\AjaxExample\Controller;
use Controller;
use Core;
class Foo extends Controller
{
// View ファイルをパスで指定
protected $viewPath = '/foo';
public function view()
{
// View ファイルに値を渡す
$this->set('foo', 'bar');
}
public function barAction()
{
// View を使わず JSON レスポンスを直接出力する
$r = new \stdClass();
$r->foo = 'bar';
Core::make('helper/ajax')->sendResult($r);
}
}
$viewParh で View ファイルを指定することができます。
<?php
// packages/ajax_example/views/foo.php
// Concrete\Package\AjaxExample\Controller\Foo#view から呼ばれる
defined('C5_EXECUTE') or die("Access Denied.");
?>
<h1><?=h($foo)?></h1>