Русскоязычный форум, посвященный фреймворку Kohana
http://forum.kohanaframework.su/

Запрос внутри запроса
http://forum.kohanaframework.su/viewtopic.php?f=21&t=29
Страница 1 из 1

Автор:  admin [ 12 фев 2012, 22:10 ]
Заголовок сообщения:  Запрос внутри запроса

Использование HMVC в Кохане.

Автор:  Migel [ 13 фев 2012, 15:34 ]
Заголовок сообщения:  Re: Запрос внутри запроса

Кто-то писал в комментах и я видел на официальном сайте, что можно действительно передавать параметры через объект Request. Пробовал, приходит какой-то бред. Т.е. не чистый пост массив, а что-то непонятное.
Вот так написано в мануале:
Код:
// This uses GET
$request = Request::factory('http://www.google.com/');

// This uses PUT
$request = Request::factory('http://example.com/put_api')->method(Request::PUT)->body(json_encode('the body'))->headers('Content-Type', 'application/json');

// This uses POST
$request = Request::factory('http://example.com/post_api')->method(Request::POST)->post(array('foo' => 'bar', 'bar' => 'baz'));

Автор:  Migel [ 13 фев 2012, 15:35 ]
Заголовок сообщения:  Re: Запрос внутри запроса

И в оф. доке про кеширование написано.
Код:
$request = Request::factory('welcome', Cache::instance());

Автор:  admin [ 13 фев 2012, 17:19 ]
Заголовок сообщения:  Re: Запрос внутри запроса

Честно говоря видел, но ни разу не пользовался. По идее это полезно в случае передачи большого количества параметров, но мне всегда хватало количества параметров, которые мы передаем через роут (как в случае с комментами - ид коммента).
Надо будет посмотреть, когда время будет. Сейчас много работы, к сожалению.

Автор:  Sergey [ 06 авг 2012, 15:50 ]
Заголовок сообщения:  Re: Запрос внутри запроса

Вызов любого контролера с любым action:

Контролёр:
Код:
$attributes = array
(
  'controller' => 'mycontroller',
  'action'     => myaction,
  'myvar' => 'test'
);

echo Request::factory(Route::get('myroute')->uri($attributes))
  ->execute()
  ->send_headers()
  ->body();


Маршрутизация:
Код:
Route::set('myroute', 'mycontroller/<action>(/<myvar>)', array('action' => 'myaction1|myaction2|myaction3', 'myvar' => '.+'))
  ->defaults(array(
      'controller' => 'mycontroller'
  ));


Вызываемый контролер:
Код:
class Controller_Mycontroller extends Controller_Common {

// какой то код

public function action_myaction1()
{
  $this->template->message = $this->request->param('myvar');
  $page_view = '/pages/static';

  $content = View::factory($page_view)
    ->bind('message', $this->template->message);

  $this->template->content = $content;
}

// какой то код

}


Вид:
Код:
<h1><?php echo $message ?></h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit...</p>

Автор:  nkl [ 18 апр 2013, 16:03 ]
Заголовок сообщения:  Re: Запрос внутри запроса

Ребят, помогите разобраться с затыком по этому уроку. Сделал, так сказать все по инструкции. Уже раз 5 проверил каждый файл посимвольно, идентично коду в примерах один в один. Но вот запара, после модификации файлов по этому уроку, при переходе по любому адресу выдается ошибка Internal server error 500. Вот исходники:
конец файла bootstrap.php:
Код:
Route::set('admin', 'admin(/<controller>(/<action>(/<id>)))')
   ->defaults(array(
      'directory'  => 'admin',
      'controller' => 'main',
      'action'     => 'index',
   ));

Route::set('comments', 'comments/<id>', array('id' => '.+'))
   ->defaults(array(
      'controller' => 'comments',
      'action' => 'index';
   ));

Route::set('articles', '<articles>(/<id>)', array('id' => '.+'))
   ->defaults(array(
      'controller' => 'articles',
      'action' => 'index'
   ));
       
if ( ! Route::cache())
{
   Route::set('static', '<action>(/<id>)', array('action' => 'about|contacts'))
      ->defaults(array(
         'controller' => 'static',
      ));
   Route::cache(TRUE);
}

Route::set('default', '<controller>(/<action>(/<id>))')
   ->defaults(array(
      'controller' => 'page',
      'action'     => 'index',
   ));

Контроллер Articles.php:
Код:
<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Articles extends Controller_Common {
   
   public function action_index()
   {
      $id = $this->request->param('id');
      
      if($id)
      {
         $content = View::factory('/pages/article')
            ->set('article', $id)
            ->bind('comments', $comments);
            
         $comments_url = 'comments/' . $id;
         $comments = Request::factory($comments_url)->execute();
      }
      else
      {
         $content = View::factory('/pages/articles');
      }
         
      $this->template->content = $content;
   }
   
} //END OF Articles

Контроллер Comments.php:
Код:
<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Comments extends Controller {
   
   public function action_index()
   {
      $id = $this->request->param('id');
      
      $content = View::factory('/comments/show')
         ->bind('comments', $comments);
         
      switch($id)
      {
         case 'article1':
            $comments = array(
               array('name' => 'Вася', 'comment' => 'Привет, Петя'),
               array('name' => 'Петя', 'comment' => 'Привет, Вася!'),
            );
         break;
         
         case 'article2':
            $comments = array(
               array('name' => 'Гена', 'comment' => 'Привет, Мир!'),
            );
         break;
         
         default:
            $comments = array();
         break;
      }
      
      $this->response->body($content);
   }
   
} //END OF Comments

Файл Вида show.php:
Код:
<?php foreach($comments as $comment): ?>

   <strong>Имя пользователя:</strong><br />
   <?php echo $comment['name']; ?><br />
   <strong>Комментарий пользователя:</strong><br />
   <?php echo $comment['comment']; ?>
   <br /><hr /><br />
<?php endforeach; ?>

Автор:  WinterSilence [ 18 апр 2013, 20:52 ]
Заголовок сообщения:  Re: Запрос внутри запроса

nkl>
.htaccess как выглядит? скорее всего лишние\неправильные роуты, загрузите архив со своими файлами куда-нить вроде народ.ру, надо проверить, еще роут по умолчанию приведите в стандартный вид:
Код:
Route::set('default', '(<controller>(/<action>(/<id>)))')
    ->defaults(array(
        'controller' => 'home',
        'action'     => 'index',
    ));

Автор:  nkl [ 18 апр 2013, 21:13 ]
Заголовок сообщения:  Re: Запрос внутри запроса

.htaccess вроде в порядке, все по дефолту:
Код:
# Turn on URL rewriting
RewriteEngine On

# Installation directory
RewriteBase /

# Protect hidden files from being viewed
<Files .*>
   Order Deny,Allow
   Deny From All
</Files>

# Protect application and system files from being viewed
RewriteRule ^(?:application|modules|system)\b.* index.php/$0 [L]

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]

Автор:  nkl [ 19 апр 2013, 14:32 ]
Заголовок сообщения:  Re: Запрос внутри запроса

Исправил ошибку переписав все роуты начиная с самого начала, таки вкралась ошибка туда, только я и не понял какая и куда именно :?

Страница 1 из 1 Часовой пояс: UTC + 4 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/