2014-09-16 3 views
2

Мне нужно выполнить запрос на любом контроллере из одной формы, и я стараюсь это:Поиск всех контроллеров в CakePHP

<select id="control"> 
     <option value="labs">Laboratórios</option> 
     <option value="computers">Computadores</option> 
     <option value="hists">Históricos</option> 
    </select> 
    <script> 
     $(document).ready(function(){ 
      $("#control").change(function(){ 
       var value = $(this).val(); 
      }); 
     }); 
    </script> 
    <?php 
     $controller = '<script>document.write(value);</script>'; 
     print_r($controller); 
     $base_url = array('controller' => $controller, 'action' => 'index'); 
     echo $this->Form->create("Filter",array('url' => $base_url, 'class' => 'filter')); 
     echo $this->Form->input("search", array('label' => 'Pesquisa', 'placeholder' => "Pesquisa...")); 
     echo $this->Form->submit("Pesquisar"); 
     echo $this->Html->link("Reset",$base_url); 
     echo $this->Form->end(); 
    ?> 

Но переменные $ контроллер имеет строку «<script>document.write(value);</script>», как это исправить? или есть другой способ сделать это ...

+0

То, что я понял, как сейчас есть, вы хотите, чтобы вызвать контроллер на основе значения $ («#») управления. Это означает, что значение $ ("# control") является именем контроллера. Правильно ли это? –

+0

есть. «Лаборатории», «Компьютеры» и «Хисты» - это имена контроллеров. –

+0

вы не можете добавить динамическое значение javascript в php. Но вы можете изменить его в html (output), может быть в действиях формы. –

ответ

0

model попробуйте вместо controller -

<?php 
    $base_url = array('controller' => 'any_controller', 'action' => 'any_action'); 
    echo $this->Form->create("Filter",array('url' => $base_url, 'class' => 'filter')); 
    $models = array('Model1' => 'Model1', 'Model2' => 'Model2', 'Model3' => 'Model3'); 
    echo $this->Form->input("model", array('label' => 'Model', 'options' => $models)); 
    echo $this->Form->input("search", array('label' => 'Pesquisa', 'placeholder' => "Pesquisa...")); 
    echo $this->Form->submit("Pesquisar"); 
    echo $this->Html->link("Reset",$base_url); 
    echo $this->Form->end(); 
?> 

и в any_action() из `any_controller вы получите все значения.

function any_action() { 
    $model = $this->request->data['Filter']['model']; 
    //instantiate the model 
    $modelInit = ClassRegistry::init($model); 
    //build search conditions depending on the other data 
    $condition = array(...); 
    $result = $modelInit->find('all', $condition); 
    //set the result and redirect to your page` 
} 
+0

Спасибо 'sgt', ваше предложение сработало. Я уже создал функцию, передал только параметр формы. –

0

Вы можете просто создать форму для изменения выпадающего списка. Я не думаю, что вам нужен PHP здесь.

<select id="control"> 
    <option value="labs">Laboratórios</option> 
    <option value="computers">Computadores</option> 
    <option value="hists">Históricos</option> 
</select> 
<script> 
    $(document).ready(function(){ 
     //This will change the action on change of dropdown value 
     $("#control").change(function(){ 
      var hostname = window.location.hostname; 
      var controller = $(this).val(); 
      $('#filterForm').attr('action', 'http://'+hostname+'/'+controller+'/index'); 
     }); 
    }); 
</script> 
<?php   
    $base_url = array('controller' => $controller, 'action' => 'index'); 
    echo $this->Form->create("Filter",array('url' => $base_url, 'class' => 'filter','id'=>'filterForm')); 
    echo $this->Form->input("search", array('label' => 'Pesquisa', 'placeholder' => "Pesquisa...")); 
    echo $this->Form->submit("Pesquisar"); 
    echo $this->Html->link("Reset",$base_url); 
    echo $this->Form->end(); 
?> 

Надеется, что это будет работать для вас ..

+0

Спасибо, также проработал –

Смежные вопросы