Why do I get these errors:? - cakephp

My error code is:
Notice: Undefined variable: form in
c:\AppServ\www\applogic\app\views\users\index.ctp on line 1
Fatal error: Call to a member function create() on a non-object in
c:\AppServ\www\applogic\app\views\users\index.ctp on line 1)))
(index.ctp)
<?php echo $form->create(null, array('action' => 'index'));?>
<fieldset>
<legend>Enter Your Name</legend>
<?php echo $form->input('name'); ?>
</fieldset>
<?php echo $form->end('Go');?>
(users_controller.php)
<?php
class UsersController extends AppController {
var $name = 'Users';
var $uses = array();
function index() {
if (!empty($this->data)) {
//data posted
echo $this->data['name'];
$this->autoRender = false;
}
}
}
?>

Did you set the $helpers in app_controller or users_controller? You need to include 'Form' in it.
If you are using 2.0, I think you need to use $this->Html (not $html)

Related

Unsupported operand types on CakePHP

I have a this
**Fatal_Error:
Error: Unsupported operand types
File: C:\wamp\www\newsletter\lib\Cake\View\Helper\FlashHelper.php
Line: 90**
every time I clicked the submit button. here's my code..
**AddsController.php //Controller**
<?php
class AddsController extends AppController {
public $helpers = array('Html','Form','Session');
public $components=array('Session');
public function index() {
if($this->request->is('post'))
{
$this->Add->create();
$this->Add->save($this->request->data);
$this->Session->setFlash('Success');
return $this->redirect(array('action'=>'index'));
}
}
}
?>
**Add.php //Model/**
<?php
App::uses('AppModel' , 'Model');
class Add extends AppModel
{
public $name = "Add";
public $useTable = 'request';
public $primaryket = 'id';
public $useDbConfig = 'default';
}
?>
**index.ctp //View/Adds/index.ctp**
<?php
echo $this->Form->create('add');
echo $this->Form->input('email');
echo $this->Form->submit('submit');
echo $this->Form->end();
?>
dbname: exercise; table: request;
goal: all inputted data must be in the db.
Thank you in advance!
Use FlashHelper to set yor flash messages, not Session->flash
https://book.cakephp.org/2.0/en/core-libraries/helpers/flash.html
// In your Controller
public $helpers = array('Html','Form','Session','Flash');
$this->Flash->set('The user has been saved.', array(
'element' => 'success'
));

Why is my function not working in phtml file?

I have created a collection.php model and added a addOrderFilter() function, but when I try to call addOrderFilter() in my phtml file, it gives me
Fatal error: Call to a member function addOrderFilter() on boolean in [...]\magento\app\design\adminhtml\default\default\template\paketid\shipping.phtml on line 5
This is my shipping.phtml :
<?php echo $this->getChildHtml('PaketId_Shipping');?>
<h1>Test custom block</h1>
<?php $order = $this->getOrder()?>
<?php $shipping = Mage::getModel('paketid_shipping/result')->getCollection()->addOrderFilter($order) ?>
<?php if(count($shipping)):
foreach($shipping as $shipping): ?>
<?php echo $this->__('Booking Code') ;?>
<?php echo $shipping->getBookingCode(); ?>
<?php endforeach; ?>
<?php endif; ?>
My collection.php model :
class PaketId_Shipping_Model_Resource_Result_Collection extends Mage_Core_Model_Resource_Db_Collection_Abstract
protected $order;
protected function _construct()
{
$this->_init('paketid_shipping/result');
}
public function addOrderFilter($order)
{
if ($order instanceof Mage_Sales_Model_Order) {
$order = (int) $order->getId();
}
if (!is_array($order)) {
$order = array($order);
}
$this->getSelect()->where("main_table.order_id IN (?)", $order);
//$this->getSelect()->where("main_table.order_id IN (?)", $order)->order('id DESC');
return $this;
}
The confusing part is, why does my phtml doesn't render my collection model ? Am I doing something wrong ?
Make sure magento is not running in compilation mode.
OR
There is something wrong in syntax Mage::getModel('paketid_shipping/result')->getCollection() . This is not returning correct collection object. Try debugging whether it returns collection object or not.
OR
You can try different similar syntax
Mage::getResourceModel('paketid_shipping/result_collection')->addOrderFilter($order);

How to define a variable in Cakephp

I trying to pass a variable in cakephp to a view and getting error Undefined variable: view [APP\View\ItQueries\add.ctp, line 9] and line 9 is this
<?php echo $this->Form->hidden('status_type', array('value'=>$view)); ?>
Here is how im defining my variable in the controller
class ItQueriesController extends AppController {
var $view = 'Open';
public function index() {
$this->ItQuery->recursive = 0;
$this->set('view', $this->view);
}
//Other Code
}
and here is where im trying to pass the variable as a hidden field
<?php echo $this->Form->create('ItQuery'); ?>
<?php echo __('Add It Query'); ?></legend>
<?php
echo $this->Form->input('status_type', array('type' => 'hidden', 'value'=>$view));
?>
<?php echo $this->Form->end(__('Submit')); ?>
Can some please show me how to fix this
You need to set the variable as part of the viewVars.
To do this add this to your controller action:
$this->set('view', $this->view);
E.g.
class ItQueriesController extends AppController {
var $view = 'Open';
function index() {
$this->set('view', $this->view);
}
}
You can then access it in the view directly using $view
Your hidden field would look like:
echo $this->Form->input('status_type', array('type' => 'hidden', 'value'=>$view));

CakePHP save() doesn't save data

I don't see anything wrong with my code. But it does not save data:
<?php
class ProductsController extends AppController{
var $name = 'Products';
//var $helpers = array('Form');
//var $scaffold;
function index(){
$this->Product->recursive = 1;
$products = $this->Product->find('all');
$this->set('products',$products);
//pr($products);
}
function add(){
$categories = $this->Product->Category->find('list',array(
'field'=>array('Category.categoryName')
));
$this->set('categories',$categories);
if(!empty($this->data)){
if($this->Product->save($this->data)){
$this->Session->setFlash('Saved');
}
}
}
}
?>
it flashes "Saved" but nothing is being inserted in my table. What could possibly be wrong when it should be functioning properly. :(
Below is my add.ctp model:
<h2>ADD</h2>
<?php echo $this->Form->create('Product',array('action'=>'add')); ?>
<?php
echo $form->input('ProductName');
echo $form->input('categories');
echo $form->end('DONE');
?>
You have to use the create() method before to save
function add(){
$categories = $this->Product->Category->find('list',array(
'field'=>array('Category.categoryName')
));
$this->set('categories',$categories);
if(!empty($this->data)){
$this->Product->create();
if($this->Product->save($this->data)){
$this->Session->setFlash('Saved');
}
}
}

Elements in cake php

i am using linux-mint os
i have to put a search form on front-end on my web's home page:
i have done something like this:
Model for my app:
var/www/project/app/model/search.php
<?php
class Search extends AppModel {
var $name = 'Search';
}
?>
My controller :
var/www/project/app/controller/searches_controller.php
<?php
class SearchesController extends AppController {
var $name = 'Searches';
var $helpers = array('Html', 'Form');
function search()
{
$this->layout = 'default';
return $searches = $this->Search->find('all');
}
}
?>
After following the above steps i have create an Element to show the form on my home page
My Element :
var/www/project/app/views/element/search.ctp
<?php
$searches = $this->requestAction('searches/search');
?>
<?php
echo $form->create('Search', array('controller'=>'searches',
'action' => 'search'));?>
<select name="search">
<option>------Select------</option>
<?php foreach($searches as $search) { ?>
<option value="<?php echo $search['Search']['id'];?>">
<?php echo $search['Search']['media'];?></option>
<?php } ?>
</select>
<?php echo $form->end('submit'); ?>
And i put code in my default.ctp like this :
<?php echo $this->element('search');?>
Having done all this, i tried to view my home page but it shows an error message:
Fatal error: Call to a member function create() on a non-object in
/var/www/Emedia/app/views/elements/search.ctp on line 4
Notice (8): Undefined variable: form [APP/views/elements/search.ctp, line 4]
The form should be:
//in your element
//remove echo $element->create... and use
echo $form->create('Search', array(
'id' => 'someform',
'url' => array(
'controller' => 'searches',
'action' => 'search')
)
);
//and form end
echo $form->end('submit'); //not $element->end('submit');
there shouldnt be any "return" - why are you doing that?
use "cake bake" if you are not yet familiar with how it works.
anyway, that should help:
$searches = $this->Search->find('all');
$this->set(compact('searches'));
If you are using CakePHP 2.x then I thinks you cant access FormHelper directly through variable $form
Try:
$this->Form->create('Search',array('action'=>'yourAction'));
echo $form->create('Search', array('controller'=>'searches',
'action' => 'search'));?>
instead of using :
echo $this->Form->create('Search', array('controller'=>'searches',
'action' => 'search'));?>
it will Resolve :
Fatal error: Call to a member function create() on a non-object in
/var/www/Emedia/app/views/elements/search.ctp on line 4

Resources