質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

1回答

1038閲覧

cakephp4でajax通信をするとError : Forbiddenが出る

sintarien

総合スコア16

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2021/03/06 04:20

https://www.sejuku.net/blog/31050
こちらの記事を参考にしてajaxでデータベースにデータを登録しようとすると、
Error : Forbiddenが出てしまいます。

ググると「config/routes.php」や「src/Application.php」のCSRFチェックの処理を書き替えるとよいと出るのですが、
うまくいきません。
https://www.sejuku.net/blog/31050
https://www.sejuku.net/blog/31050

なにか解決する方法がわかる方いましたら知恵をお貸しください。
よろしくお願いいたします。

index.php

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8" /> <title>jQuery・Ajax・Cake</title> <?php // Ajax 送信用の JavaScript を読み込み echo $this->Html->script('http://code.jquery.com/jquery-1.11.3.min.js'); //echo $this->Html->script('send_data'); echo $this->Html->script($ajax_name); ?> </head> <body> <h1>jQuery・Ajax・Cake</h1> <?= $this->Form->create() ?> <?php echo $this->Form->textarea("textdata",['cols'=> 20, 'rows' => 4,'id' => 'textdata']); ?> <?= $this->Form->submit('送信',['id' => 'send']) ?> <?= $this->Form->end() ?> </body> </html>

DatasController.php

<?php declare(strict_types=1); namespace App\Controller; use App\Controller\AppController; use Cake\Datasource\ConnectionManager; use Cake\Event\Event; class DatasController extends AppController { public function index() { $this->set('ajax_name','send_data.js'); } public function add(){ $data = $this->request->data('request'); $connection = ConnectionManager::get('default'); $connection->insert('datas', [ 'text' => $data ]); } }

send_data.js

$(document).ready(function() { /** * 送信ボタンクリック */ $('#send').click(function() { var data = { request : $('#textdata').val() }; alert( $('#textdata').val() ); $.ajax({ type: 'POST', datatype:'json', url: "/kamedaapp/datas/add.json", data: data, success: function(data,dataType) { alert('Success'); }, /** * Ajax通信が失敗した場合に呼び出されるメソッド */ error: function(XMLHttpRequest, textStatus, errorThrown) { alert('Error : ' + errorThrown); } }); return false; }); });

Application.php

<?php declare(strict_types=1); namespace App; use Cake\Core\Configure; use Cake\Core\ContainerInterface; use Cake\Core\Exception\MissingPluginException; use Cake\Datasource\FactoryLocator; use Cake\Error\Middleware\ErrorHandlerMiddleware; use Cake\Http\BaseApplication; use Cake\Http\Middleware\BodyParserMiddleware; use Cake\Http\Middleware\CsrfProtectionMiddleware; use Cake\Http\MiddlewareQueue; use Cake\ORM\Locator\TableLocator; use Cake\Routing\Middleware\AssetMiddleware; use Cake\Routing\Middleware\RoutingMiddleware; class Application extends BaseApplication { public function bootstrap(): void { // Call parent to load bootstrap from files. parent::bootstrap(); if (PHP_SAPI === 'cli') { $this->bootstrapCli(); } else { FactoryLocator::add( 'Table', (new TableLocator())->allowFallbackClass(false) ); } if (Configure::read('debug')) { $this->addPlugin('DebugKit'); } // Load more plugins here } /** * Setup the middleware queue your application will use. * * @param \Cake\Http\MiddlewareQueue $middlewareQueue The middleware queue to setup. * @return \Cake\Http\MiddlewareQueue The updated middleware queue. */ public function middleware(MiddlewareQueue $middlewareQueue): MiddlewareQueue { $middlewareQueue ->add(new ErrorHandlerMiddleware(Configure::read('Error'))) ->add(new AssetMiddleware([ 'cacheTime' => Configure::read('Asset.cacheTime'), ])) ->add(new RoutingMiddleware($this)) ->add(new BodyParserMiddleware()) ->add(new CsrfProtectionMiddleware([ 'httponly' => true, ]) ); return $middlewareQueue; } /** * Register application container services. * * @param \Cake\Core\ContainerInterface $container The Container to update. * @return void * @link https://book.cakephp.org/4/en/development/dependency-injection.html#dependency-injection */ public function services(ContainerInterface $container): void { } /** * Bootstrapping for CLI application. * * That is when running commands. * * @return void */ protected function bootstrapCli(): void { try { $this->addPlugin('Bake'); } catch (MissingPluginException $e) { // Do not halt if the plugin is missing } $this->addPlugin('Migrations'); // Load more plugins here } }

routes.php

<?php use Cake\Routing\Route\DashedRoute; use Cake\Routing\RouteBuilder; use Cake\Routing\Router; $routes->setRouteClass(DashedRoute::class); $routes->scope('/', function (RouteBuilder $builder) { Router::scope('/',function($routes){ $routes->setExtensions(['json']); $routes->connect('/datas/get',['controller'=>'Datas','action'=>'get'])->setMethods(['GET']); $routes->connect('/datas/add',['controller'=>'Datas','action'=>'add'])->setMethods(['POST']); // $routes->resources('Datas'); }); $builder->connect('/', ['controller' => 'Datas', 'action' => 'display', 'home']); $builder->connect('/pages/*', 'Pages::display'); $builder->fallbacks(); }); // use Cake\Routing\Route\DashedRoute; // use Cake\Routing\RouteBuilder; // use Cake\Routing\Router; // $routes->setRouteClass(DashedRoute::class); // $routes->scope('/', function (RouteBuilder $builder) { // Router::scope('/',function($routes){ // $routes->setExtensions(['json']); // $routes->connect('/datas/get',['controller'=>'Datas','action'=>'get'])->setMethods(['GET']); // $routes->connect('/datas/regist',['controller'=>'Datas','action'=>'regist'])->setMethods(['POST']); // // $routes->resources('Datas'); // }); // $builder->connect('/', ['controller' => 'Datas', 'action' => 'index']); // $builder->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']); // $builder->fallbacks(); // });

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2021/03/06 04:27

ajaxではなく直接urlにアクセスすれば表示がされるのでしょうか?
sintarien

2021/03/06 04:43

すみません。 直接アクセスというのは 検索欄にhttp://localhost/kamedaapp/datas/add と入力してページを開くということでしょうか? それをすると Method "data()" does not exist とエラーが出ます。
yambejp

2021/03/06 04:48 編集

ajaxで取りに行っているのは/kamedaapp/datas/add.jsonではないのですか? (jsonファイルにpostしているのも微妙ですが)
guest

回答1

0

自己解決

cakephp3で作り直して

Application.phpの
->add(new CsrfProtectionMiddleware([
'httponly' => true,
]));
の記述をコメントアウトしたら動いたのでこちらで進めます。

cakephp4だと今度は Internal Server Error
が出てしまい解決できませんでした。

投稿2021/03/06 06:54

sintarien

総合スコア16

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問