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

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

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

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

Q&A

1回答

1856閲覧

urlのパスの自動生成ボタンを作成したい

退会済みユーザー

退会済みユーザー

総合スコア0

CakePHP

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

0グッド

0クリップ

投稿2015/08/20 08:36

編集2015/08/20 09:49

php

1//in app/config/routes 2Router::parseExtensions('json'); 3 4//in UrlPathController 5<? public function generate_path($url){ 6 $path = $this->UrlPath->generatePath($url); 7 $data = [ 8 'success' => false, 9 'path' => null 10 ]; 11 if($path){ 12 $data['success'] = true; 13 $data['path'] = $path; 14 15 } 16 $this->set('data', $data); 17 $this->set('_serialize', ['data']); 18} 19?> 20 21//in model 22<? 23App::import('Model','UrlPath'); 24public function generatePath($url){ 25 $this->UrlPath= new UrlPath(); 26 $path = substr(str_shuffle('1234567890abcdefghijklmnopqrstuvwxyz'),0,7); 27 $record = $this->UrlPath->findByUrlAndPath($url,$path); 28 if($record==false){ 29 $path = ['path']; 30 31 } 32 return $path; 33 } 34 ?> 35 36//in view 37<?= $this->Form->button('自動生成', ['type'=>'button','id' => 'generate_path', 'class' => 'btn btn-default btn-sm']) ?> 38<?= $this->Form->input('path', ['label' => '短縮URL名','id' =>'path']) ?> 39 40<script> 41$(document).ready(function(){ 42 $(function() { 43 $("#generate_path").click(function() { 44 $.ajax({ 45 url:'<?php echo Router::url(['action' => 'generate_path', 'ext' => 'json']) ?>', 46 type:'post', 47 dataType: 'json', 48 }) 49 .success(function(data) { 50 $("#path").val(data); 51 }) 52 .error(function() { 53 alert('通信エラー'); 54 }); 55 }); 56 }); 57}); 58</script>

今、urlのパスの自動生成ボタンを作成していますが、
logを見ると
Error: Fatal Error (1): Call to a member function findByUrlAndPath() on null というえらがでています。
$record = $this->UrlPath->findByUrlAndPath($url,$path); このラインが間違っているのは合ってるとおもいますが、どうなおせばいいのか分からないです。

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

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

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

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

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

guest

回答1

0

$this->UrlPath->findByUrlAndPathが記述されているModelで
UrlPathというModelは読み込んでるのでしょうか?

読み込んでないのであれば下記のように対象Modelを読み込んでください。

PHP

1App::import('Model','UrlPath'); 2$this->UrlPath = new UrlPath();

投稿2015/08/20 09:00

編集2015/08/20 09:02
icham

総合スコア559

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

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

退会済みユーザー

退会済みユーザー

2015/08/20 09:51

追加してみたんですが、まだ動かなかったです。
icham

2015/08/20 14:03

エラー内容は同じでしょうか? ちなみにApp::import〜をnewする直前でやっても同じですか? あれ、そもそもfindByUrlAndPathメソッドは同じModelですね? その場合は、$this->findByUrlAndPath()で動かないでしょうか?
退会済みユーザー

退会済みユーザー

2015/08/21 03:15 編集

Missing argument 1 for  UrlPath::generate_path() [APP\Controller\UrlPath.php, line 149] Notice (8): Undefined variable: url という エラーががでます。 多分 script の問題だとおもいますが、、、
icham

2015/08/21 06:09

UrlPathControllerのgenerate_pathメソッドは引数が必須になっていますので /url_paath/generate_path ではなく /url_paath/generate_path/xxx(id?文字列?) なので エラーになっていると思います。 また、ajaxからpostで送っているのにurlのパラメータとして$urlを受け取っています。 アクションをgenerate_path($url)このようにすると /controller/action/url(渡す何か)でアクセスしないとダメになります。 空文字を許容するならば generate_path($url = null)にしないとダメです。
退会済みユーザー

退会済みユーザー

2015/08/21 07:02

その通りgenerate_path($url = null)でやって見たんですが、 inputに [object Object] と表示されています。 デバックから見ると { "data": { "success": true, "path": "ujst7qy" } } 表示されています。
退会済みユーザー

退会済みユーザー

2015/08/21 07:11

view には <?= $this->Form->input('url', ['label' => 'url','type' => 'text']) ?> というがあります。
icham

2015/08/21 08:25

urlを自動生成じゃなく固定でやってみてください。 $.ajaxのオプションを { url: /url_path/generate_path/ type: 'get', dataType: 'json', } 今更気づいたのですが $(document).ready(function(){ と $(function() { はほぼ同じ意味なので どちらか片方で囲ってあげれば大丈夫です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問